Cómo solucionar el error de Nginx '(13: Permission denied) while connecting to upstream'

Publicado 27 de agosto de 2024

Problema: Error de Nginx '(13: Permission denied)'

Al usar Nginx como servidor web o proxy inverso, puede aparecer el mensaje de error "(13: Permission denied) while connecting to upstream." Este error suele ocurrir cuando Nginx no tiene los permisos necesarios para acceder o comunicarse con el servidor upstream. Puede afectar el funcionamiento de tu sitio web e impedir que el contenido llegue a los usuarios.

6 Soluciones para resolver el problema de permisos denegados en Nginx

1. Verificar los permisos de usuario de Nginx

Para solucionar el error de permisos denegados de Nginx, revisa los permisos de usuario de Nginx. Examina el archivo Nginx.conf para ver la configuración de usuario y grupo. Asegúrate de que el usuario de Nginx pueda acceder a los archivos y directorios. Es posible que necesites cambiar los permisos de archivos y directorios con el comando chmod.

2. Examinar la configuración de SELinux

SELinux puede bloquear el acceso de Nginx a archivos o conexiones de red. Verifica el estado de SELinux y cambia los valores booleanos si es necesario. Usa el comando 'setsebool' para modificar estos ajustes. Puedes cambiar el valor booleano de SELinux para la conexión de red httpd con:

setsebool httpd_can_network_connect on -p

3. Revisar los archivos de configuración de Nginx

Revisa tu archivo Nginx.conf en busca de errores. Examina la configuración del servidor upstream. Asegúrate de que todas las rutas y direcciones de servidor sean correctas y que Nginx pueda acceder a estos recursos.

4. Analizar los registros de errores de Nginx

Los registros de errores de Nginx pueden ayudarte a encontrar el problema de permisos denegados. Revisa los registros de errores, generalmente en /var/log/nginx/error.log, buscando mensajes de permisos denegados. Usa el comando grep para encontrar estos errores:

grep denied /var/log/nginx/error.log

5. Investigar las reglas del firewall

Tu firewall podría estar bloqueando las conexiones de Nginx. Revisa las reglas de tu firewall y asegúrate de que permitan a Nginx conectarse a los puertos y direcciones IP necesarios. Es posible que debas agregar nuevas reglas o modificar las existentes para dar a Nginx el acceso adecuado.

6. Verificar la disponibilidad del servidor upstream

Comprueba que tus servidores upstream estén funcionando y sean accesibles. Intenta conectarte a estos servidores desde tu servidor Nginx para descartar problemas de red o configuración. Puedes usar telnet o curl para probar estas conexiones y asegurarte de que los servidores upstream estén respondiendo.

Si sigues teniendo problemas, es posible que veas un error 502 Bad Gateway al conectarte al upstream. En este caso, verifica tu servidor de aplicaciones y asegúrate de que esté funcionando y configurado correctamente.

Recuerda, si cambias la configuración de SELinux, es posible que necesites ejecutar:

audit2allow -m mynginx
sudo semodule -i mynginx.pp

Esto crea e instala un módulo de política personalizado basado en los registros de auditoría.

Pasos adicionales para solucionar errores de permisos denegados en Nginx

Usar audit2allow para generar políticas SELinux

La herramienta audit2allow ayuda a crear políticas SELinux cuando las políticas estándar no funcionan. Para usarla:

  1. Revisa los registros de SELinux en busca de acciones denegadas:

    grep "denied" /var/log/audit/audit.log
  2. Usa audit2allow para generar una política:

    audit2allow -m mynginx sudo semodule
  3. Aplica la nueva política:

    mynginx sudo semodule -i mynginx.pp

Este proceso crea e instala un módulo SELinux basado en las acciones denegadas recientes.

Ajustar la propiedad y permisos de archivos

Corregir la propiedad y los permisos de los archivos ayuda a resolver problemas de permisos de Nginx:

  1. Establece la propiedad de archivos y directorios de Nginx:

    chown -R nginx:nginx /var/www/html
  2. Establece los permisos:

    chmod 755 /var/www/html
    chmod 644 /var/www/html/*

Estos comandos otorgan al usuario y grupo de Nginx la propiedad de los archivos web y establecen permisos de lectura, escritura y ejecución. Cambia las rutas según sea necesario para tu configuración.