(13: permissão negada) ao conectar-se a montante: [nginx]

296

Estou trabalhando na configuração do projeto Django com Nginx e Gunicorn.

Enquanto estou acessando minha porta gunicorn mysite.wsgi:application --bind=127.0.0.1:8001no servidor Nginx, estou recebendo o seguinte erro no meu arquivo de log de erros;

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 connect () a 127.0.0.1:8001 falhou (13: permissão negada) ao conectar-se ao upstream, cliente: 127.0.0.1, server: localhost, solicitação: "GET / HTTP / 1.1", upstream:, "http://127.0.0.1:8001/"host: "localhost: 8080"

Abaixo está o conteúdo do meu nginx.confarquivo;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

Na página HTML que estou recebendo 502 Bad Gateway.

Que erro estou cometendo?

Mulagala
fonte

Respostas:

680

Eu tive um problema semelhante ao fazer o Fedora 20, Nginx, Node.js e Ghost (blog) funcionar. Acontece que meu problema ocorreu devido ao SELinux .

Isso deve resolver o problema:

setsebool -P httpd_can_network_connect 1

Detalhes

Eu verifiquei se há erros nos logs do SELinux:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

E descobriu que a execução dos seguintes comandos corrigiu meu problema:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

Referências:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux

joebarbere
fonte
22
Graças, que fixa o meu problema também, eu estou no CentOS 7.
Jahan
21
obrigado. Eu precisava yum install policycoreutils-pythonpara conseguir o audit2allowprimeiro. Referência: centos.org/forums/viewtopic.php?t=5012
gross.jonas
Muito obrigado, é trabalho para mim usar um servidor de nó. (Redhat 7)
BlaShadow
Veja também aqui . No meu caso, tive que adicionar nginx ao grupo de usuários em cujo diretório pessoal o wwwroot estava armazenado.
1
No Fedora 23, a instalação do policycoreutils-pythonnão forneceu o comando audit2allow. Após algumas pesquisas, descobri que você deve instalar o pacote devel yum install policycoreutils-devel. Referência: danwalsh.livejournal.com/61710.html
Joseph N.
182

Eu já tive esse problema também. Outra solução é alternar o valor booleano do SELinux para conexão à rede httpd on(o Nginx usa o rótulo httpd).

setsebool httpd_can_network_connect on

Para fazer a alteração persistir, use o sinalizador -P.

setsebool httpd_can_network_connect on -P

Você pode ver uma lista de todos os booleanos SELinux disponíveis para httpd usando

getsebool -a | grep httpd
Sid
fonte
1
Isso funcionou, obrigado. Atualizei do CentOS 6.5 -> 6.7 e ele deve ter desativado o valor durante a atualização, porque estava funcionando bem antes da atualização. Correção simples.
9185 Mike Purcell #
16

Tive um problema semelhante no Centos 7. Quando tentei aplicar a solução prescrita por Sorin, comecei a me mover em ciclos. Primeiro, tive uma permissão {write} negada. Então, quando resolvi que tinha uma permissão {connectto} negada. Depois, volte para a permissão {write} negada.

Após a resposta do @Sid acima, verifique as bandeiras usando getsebool -a | grep httpde alternando-as e descobri que, além do httpd_can_network_connect estar desativado. http_anon_write também estava desativado, resultando em permissão negada de gravação e permissão negada {connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

Obtido usando o sudo cat /var/log/audit/audit.log | grep nginx | grep negado como explicado acima.

Então eu os resolvi um de cada vez, alternando as bandeiras uma de cada vez.

setsebool httpd_can_network_connect on -P

Em seguida, execute os comandos especificados por @sorin e @ Joseph acima

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

Basicamente, você pode verificar as permissões definidas no setsebool e correlacionar isso com o erro obtido em grepp'ing 'audit.log nginx, negado

unlockme
fonte
14

Eu resolvi meu problema executando o meu Nginx como o usuário com o qual estou logado atualmente, mulagala .

Por padrão, o usuário como nginx é definido na seção superior do nginx.confarquivo, como mostrado abaixo;

user nginx; # Default Nginx user

Mude nginx para o nome do seu usuário atual - aqui, mulagala .

user mulagala; # Custom Nginx user (as username of the current logged in user)

No entanto, isso pode não resolver o problema real e pode realmente ter efeitos colaterais casuais.

Para uma solução eficaz, consulte a solução de Joseph Barbere .

Mulagala
fonte
Obrigado que me ajudou com isso
Overlord
4

se o erro "502 Bad Gateway" for lançado no centos api url para api gateway proxy pass no nginx, execute o seguinte comando para resolver o problema

sudo setsebool -P httpd_can_network_connect 1
Ezhil Arasan
fonte
2

13-permissão-negada ao conectar-se ao upstreamnginx no servidor centos -

setsebool -P httpd_can_network_connect 1

kumar
fonte
1

Também já encontrei esse problema. Estou usando o Nginx com HHVM, a solução abaixo corrigiu meu problema:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp
sule
fonte
1
  1. Verifique o usuário em /etc/nginx/nginx.conf
  2. Mude a propriedade para usuário.
sudo chown -R nginx:nginx /var/lib/nginx

Agora veja a mágica.

anjaneyulubatta505
fonte
0

Muito obrigado. Eu apliquei este guia em: Centos 7, AspNet Core 3.1, configuração do Nginx.

Quang Vu
fonte
0

Obrigado a todos pelas respostas. A resposta de Kumar em 21 de agosto de 19 às 12:14 me deu uma trégua depois de alguns dias de solução do problema que eu tinha, ou seja:

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

A solução que apliquei foi a seguinte:

setsebool -P httpd_can_network_connect 1
user386578
fonte
-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
Titânio
fonte