¿Cómo solucionar el error "Stat() Failed (13: Permission Denied)" en Nginx?

Publicado 13 de octubre de 2024

Problema: Error de permiso denegado en Nginx

El error "Stat() Failed (13: Permission Denied)" en Nginx ocurre cuando el servidor web no tiene los permisos adecuados para acceder a archivos o directorios. Este problema puede impedir que Nginx sirva contenido o ejecute scripts, lo que puede causar tiempo de inactividad del sitio web o problemas con el funcionamiento del sitio.

Solución del error de permiso denegado

Ajustar la propiedad de archivos y directorios

Para solucionar el error de permiso denegado, ajusta la propiedad de los archivos y directorios. Usa el comando chown para cambiar el propietario de los archivos y directorios al usuario de Nginx, generalmente www-data. Por ejemplo:

sudo chown www-data:www-data /username/test/static

Para aplicar los cambios de propiedad a todos los archivos y subdirectorios, agrega la opción -R:

sudo chown -R www-data:www-data /username/test/static

Consejo: Verificar cambios de propiedad

Después de cambiar la propiedad, usa el comando 'ls -l' para comprobar si los cambios se aplicaron correctamente:

ls -l /username/test/static

Esto mostrará los permisos de archivos y directorios, el propietario y la información del grupo.

Modificar los permisos de directorio

Modifica los permisos del directorio usando el comando chmod. Establece los valores correctos para permitir que Nginx acceda a los archivos. Una configuración común de permisos es 755, que otorga permisos de lectura, escritura y ejecución al propietario, y permisos de lectura y ejecución a otros:

sudo chmod 755 /username/test/static

Establece el acceso adecuado a lo largo de toda la ruta del directorio. Cada directorio padre debe tener al menos permiso de ejecución para el usuario de Nginx:

sudo chmod 755 /username
sudo chmod 755 /username/test

Agregar el usuario de Nginx al grupo requerido

Si cambiar la propiedad y los permisos no funciona, agrega el usuario de Nginx al grupo necesario. Usa el comando gpasswd para agregar el usuario www-data al grupo que posee el directorio:

sudo gpasswd -a www-data username

Después de agregar el usuario de Nginx al grupo, actualiza los permisos del grupo para el acceso al directorio:

sudo chmod g+x /username
sudo chmod g+x /username/test
sudo chmod g+x /username/test/static

Esto otorga al grupo permiso de ejecución en cada directorio de la ruta, permitiendo que Nginx acceda a los archivos.

Prueba y verificación de la solución

Ejecutar Nginx como el usuario apropiado

Para probar si Nginx puede acceder a los archivos con los nuevos permisos, ejecuta un comando como el usuario de Nginx. Usa sudo para cambiar al usuario www-data e intenta acceder a los archivos:

sudo -u www-data stat /username/test/static/index.html

Si este comando se ejecuta sin errores, Nginx ahora puede acceder a los archivos. Si ves un error de "Permiso denegado", revisa los pasos anteriores y asegúrate de que todos los permisos estén configurados correctamente.

Consejo: Verificar la propiedad del archivo

Para verificar rápidamente si la propiedad del archivo está configurada correctamente, usa el comando ls -l:

ls -l /username/test/static/index.html

Esto mostrará el propietario y el grupo del archivo. Asegúrate de que coincidan con el usuario de Nginx (generalmente www-data).

Recargar la configuración de Nginx

Después de cambiar los permisos o la propiedad, recarga la configuración de Nginx para aplicar los cambios:

sudo systemctl reload nginx

Este comando reinicia el servicio Nginx sin interrumpir las conexiones activas.

Para verificar si el error se ha resuelto, revisa los registros de error de Nginx:

sudo tail -f /var/log/nginx/error.log

Si no ves los errores de "Permiso denegado" en el registro, el problema está resuelto. Tu servidor Nginx ahora debería servir los archivos estáticos desde el directorio especificado.