(13: Permiso denegado) mientras se conecta a upstream: [nginx]

296

Estoy trabajando con la configuración del proyecto Django con Nginx y Gunicorn.

Mientras accedo a mi puerto gunicorn mysite.wsgi:application --bind=127.0.0.1:8001en el servidor Nginx, recibo el siguiente error en mi archivo de registro de errores;

30/05/2014 11:59:42 [crítico] 4075 # 0: * 6 connect () a 127.0.0.1:8001 falló (13: Permiso denegado) mientras se conectaba a upstream, cliente: 127.0.0.1, servidor: localhost, solicitud: "GET / HTTP / 1.1", ascendente:, "http://127.0.0.1:8001/"host: "localhost: 8080"

A continuación se muestra el contenido de mi nginx.confarchivo;

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;
    }
}

En la página HTML que estoy recibiendo 502 Bad Gateway.

¿Qué error estoy haciendo?

Mulagala
fuente

Respuestas:

680

Tuve un problema similar al hacer que Fedora 20, Nginx, Node.js y Ghost (blog) funcionen. Resulta que mi problema se debió a SELinux .

Esto deberia resolver el problema:

setsebool -P httpd_can_network_connect 1

Detalles

Revisé los errores en los registros de SELinux:

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

Y descubrí que ejecutar los siguientes comandos solucionó mi problema:

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

Referencias

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
fuente
22
Gracias, eso también solucionó mi problema, estoy en CentOS 7.
Jahan
21
Gracias. Lo necesitaba para yum install policycoreutils-pythonllegar audit2allowprimero. Referencia: centos.org/forums/viewtopic.php?t=5012
gross.jonas
Muchas gracias, es un trabajo para mí usar un servidor de nodo. (Redhat 7)
BlaShadow el
Ver también aquí . En mi caso, tuve que agregar nginx al grupo del usuario en cuyo directorio de inicio se almacenó el wwwroot.
1
En Fedora 23, la instalación policycoreutils-pythonno proporcionó el comando audit2allow. Después de investigar un poco, encontré que deberías instalar el paquete de desarrollo yum install policycoreutils-devel. Referencia: danwalsh.livejournal.com/61710.html
Joseph N.
182

También me he encontrado con este problema. Otra solución es alternar el valor booleano SELinux para la conexión de red httpd on(Nginx usa la etiqueta httpd).

setsebool httpd_can_network_connect on

Para que el cambio persista, use la bandera -P.

setsebool httpd_can_network_connect on -P

Puede ver una lista de todos los booleanos SELinux disponibles para httpd usando

getsebool -a | grep httpd
Sid
fuente
1
Esto funcionó, gracias. Actualicé desde CentOS 6.5 -> 6.7 y debe haber predeterminado el valor desactivado durante la actualización, porque estaba funcionando bien antes de la actualización. Solución simple
Mike Purcell
16

Tuve un problema similar en Centos 7. Cuando intenté aplicar la solución prescrita por Sorin, comencé a moverme en ciclos. Primero tuve un permiso de {escritura} denegado. Luego, cuando resolví que tenía un permiso {connectto} denegado. Luego de nuevo a permiso {write} denegado.

Siguiendo la respuesta de @Sid arriba de verificar las banderas usando getsebool -a | grep httpdy alternando, encontré que además de httpd_can_network_connect está apagado. http_anon_write también estaba desactivado, lo que resultó en permiso denegado de escritura y permiso denegado {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

Obtenido usando sudo cat /var/log/audit/audit.log | grep nginx | grep denegado como se explicó anteriormente.

Así que los resolví uno a la vez, activando las banderas de una en una.

setsebool httpd_can_network_connect on -P

Luego ejecute los comandos especificados por @sorin y @Joseph arriba

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

Básicamente, puede verificar los permisos establecidos en setsebool y correlacionarlos con el error obtenido de grepp'ing 'audit.log nginx, denegado

desbloqueame
fuente
14

He resuelto mi problema ejecutando mi Nginx como el usuario con el que estoy conectado actualmente, mulagala .

Por defecto, el usuario como nginx se define en la sección superior del nginx.confarchivo como se ve a continuación;

user nginx; # Default Nginx user

Cambie nginx al nombre de su usuario actual, aquí, mulagala .

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

Sin embargo, esto puede no abordar el problema real y en realidad puede tener efectos secundarios casuales.

Para una solución efectiva, consulte la solución de Joseph Barbere .

Mulagala
fuente
Gracias que me ayudaron a superar esto
Overlord
4

si el error "502 Bad Gateway" aparece en la URL de la API de Centos para el paso proxy de la puerta de enlace de API en nginx, ejecute el siguiente comando para resolver el problema

sudo setsebool -P httpd_can_network_connect 1
Ezhil Arasan
fuente
2

13-permiso-denegado mientras se conecta a upstreamnginx en el servidor centos -

setsebool -P httpd_can_network_connect 1

kumar
fuente
1

También me he encontrado con este problema. Estoy usando Nginx con HHVM, la solución a continuación solucionó mi problema:

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

sudo restorecon -R -v /etc/nginx/fastcgi_temp
sule
fuente
1
  1. Comprobar al usuario en /etc/nginx/nginx.conf
  2. Cambiar la propiedad al usuario.
sudo chown -R nginx:nginx /var/lib/nginx

Ahora mira la magia.

anjaneyulubatta505
fuente
0

Muchas gracias. He aplicado esta guía en: Centos 7, AspNet Core 3.1, configuración de Nginx.

Quang Vu
fuente
0

Gracias por todas las respuestas. La respuesta de Kumar el 21 de agosto de 19 a las 12:14 me dio un respiro después de unos días de solucionar el problema que tuve, es decir:

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

La solución que apliqué fue la siguiente:

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

sudo semodule -i mynginx.pp
Titanio
fuente