Permiso denegado durante la lectura aguas arriba

40

Hemos implementado nuestra aplicación de rieles en nginx y pasajeros. De manera intermitente, las páginas de la aplicación se cargan parcialmente. No hay ningún error en el registro de la aplicación. Pero el registro de error de nginx muestra lo siguiente:

2011/02/14 05:49:34 [crit] 25389#0: *645 open() "/opt/nginx/proxy_temp/2/02/0000000022" failed (13: Permission denied) while reading upstream, client: x.x.x.x, server: y.y.y.y, request: "GET /signup/procedures?count=0 HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "y.y.y.y", referrer: "http://y.y.y.y/signup/procedures"

usuario68613
fuente
Puede configurar el nivel de registro para depurar: nginx.org/en/docs/debugging_log.html
Rimian

Respuestas:

39

Tuve el mismo problema en una configuración NGINX / PHP-FPM (php-fpm = fcgi mejorado para php).

Puede averiguar en qué usuario se ejecutan los procesos nginx como

ps aux | grep "nginx: worker process"

Y luego verifique si los permisos en sus archivos proxy son correctos

ls -l /opt/nginx/proxy_temp/

En mi caso, nginx se estaba ejecutando como www-datay dos de los directorios en mi directorio proxy pertenecían a root.

Todavía no sé cómo sucedió, pero lo arreglé haciendo (como root)

chown www-data.www-data /opt/nginx/proxy_temp
cmc
fuente
44
¡La mejor solucion!
efkan
¿Por qué no se acepta todavía?
Kishor Pawar
1
para aquellos que usan #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno
1
Detuve mi proceso nginx, cambié el nombre de la carpeta a otro nombre, reinicié el proceso nginx y había creado la carpeta nuevamente con los permisos correctos. ¡Trabajado como un encanto!
Chirayu Shishodiya
8

Probablemente comenzó con la raíz del usuario, luego la cambió. Ahora el problema es que las carpetas de caché, es decir

/var/cache/nginx/client_temp
/var/cache/nginx/fastcgi_temp
/var/cache/nginx/proxy_temp
/var/cache/nginx/scgi_temp
/var/cache/nginx/uwsgi_temp

ya son propiedad de root, por lo que su usuario nginx (o lo que sea que intente cambiar) no puede acceder a ellos porque tienen un permiso de 700.

Entonces la solución es fácil. Pare nginx, luego:

rm -rf /var/cache/nginx/*

o cualquiera que sea el camino en su distribución y liberación. Luego reinicie nginx, que volverá a crear estas carpetas con los permisos adecuados.

bviktor
fuente
8

Compruebe también el archivo nginx.conf para asegurarse de que está especificando el usuario Y el grupo correctos.

Tuve un problema donde los permisos en el directorio estaban configurados para username / nginx, pero el usuario nginx.conf solo especificaba el nombre de usuario. De manera predeterminada, si no se da un grupo a la directiva del usuario, usa el mismo nombre que el usuario. Entonces, username / username estaba intentando acceder a un directorio en lugar de username / nginx. Actualizar la configuración solucionó mis problemas.

Ver: http://nginx.org/en/docs/ngx_core_module.html#user

Michael Sepcot
fuente
2
¿Puedes publicar la configuración que mencionaste aquí?
Paweloque
5

Así que hice todo lo anterior y desafortunadamente para mí me estaba dando el mismo error. Estoy ejecutando una aplicación de rails empaquetada en un archivo jar con torquebox en una máquina centos 6.7 con nginx. Luché contra esto durante aproximadamente 3 horas hasta que encontré otra solución y espero que ayude a alguien más. De acuerdo con este artículo, nginx puede ejecutarse en modo forzado. Simplemente cambié nginx a modo permisivo con

setenforce 0

Con eso, el error desapareció y pude ejecutar mi aplicación en un entorno de preparación / producción.

No tenía idea hasta que encontré el error en audit.log

type=AVC msg=audit(1444454198.438:466): avc:  denied  { name_connect } for  pid=3201 comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

Realmente espero que esto le ahorre a alguien las 3 horas que acabo de perder.

Bernardo Pineda
fuente
1
No te equivocas, no sé por qué alguien vota -1 (la culpa es suya). El problema está en los hosts basados ​​en RedHat / CentOS y en selinux. Una forma es setenforce 0 (grosero), otra forma es con setsebool y opciones de red.
periket2000
Ayudó con CentOS 7.2.
MKatleast3
setsebool -P httpd_can_network_connect 1 de stackoverflow.com/a/24830777/721331
McKelvin
3

Al iniciar nginx desde una cuenta no privilegiada, la use_temp_path=off.

proxy_cache_path ... use_temp_path=off;

Esto necesitaba evitar que nginx intentara poner los archivos en el valor predeterminado proxy_temp_path. De los documentos nginx:

El directorio para archivos temporales se establece en función del parámetro use_temp_path (1.7.10). Si este parámetro se omite o se establece en el valor activado, se utilizará el directorio establecido por la directiva proxy_temp_path para la ubicación dada. Si el valor está desactivado, los archivos temporales se colocarán directamente en el directorio de caché.

JinnKo
fuente
-3
chmod 777 /opt/nginx/proxy_temp/

Tuve el mismo problema y lo solucionó chmod en ese directorio.

Firman Syah
fuente
13
chmod 777 nunca es una buena idea.
sendmoreinfo