> Faqs > Solucionar un error 403 forbidden en Nginx

Solucionar un error 403 forbidden en Nginx

Acabo de publicar un sitio web en Nginx y al acceder me muestra un error 403 Forbidden. No pone nada más, así que no sé realmente qué es lo que pueda estar pasando.

403 Forbidden
nginx/1.14.0 (Ubuntu)

Es un sitio PHP. He probado algunas cosas que encontré y no he podido solucionarlo todavía.

Respuestas

Las causas de un error 403 pueden ser diversas. En principio quiere decir que no tienes acceso al contenido que quieres acceder mediante la URL que has escrito. Esto puede deberse simplemente a que el servidor no tiene cómo devolverte un contenido, es decir, no tiene cómo resolver la ruta que le has indicado.

Un error típico es que en la secuencia de archivos que van a capturar la solicitud al servidor no exista ninguno que la pueda procesar. Esto lo puedes configurar en el archivo de configuración para tu virtual host en nginx, que puede tener varias localizaciones distintas, pero que generalmente se encuentra en /etc/nginx/sites-available/example.com

Si la URL es una carpeta, primero tienes que comprobar que en la lista de archivos "document root" tengas alguno para procesarlo. Si es un archivo index.php tendrás que indicarlo, colocando el orden de preferencia. Sería algo como

index index.php index.html;

Luego, en la configuración "location" tienes que indicar correctamente el archivo que se va a encargar de procesar la solicitud. Generalmente sería algo como:

location / {
    try_files $uri $uri/;
}

Pero si es un framework, podrías indicar que esa solicitud se procese por un archivo index.php que haga el trabajo de enrutado.

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Básicamente con estas dos directrices "location" dices a Nginx cómo tiene que buscar candidatos para procesar la solicitud. Si no tienes nadie que se haga cargo de la solicitud en realidad recibirías un error 404, pero podría ser el caso que intentes decirle que se encarge de procesar la solicitud algún archivo que no existe en el servidor o que no tiene cómo procesar.

Si los archivos que te da el error son ".php" tendrías que revisar que la configuración de PHP está correcta en el servidor. Aquí ya depende de cómo hayas instalado PHP en tu sistema, pero esta configuración la tienes en el bloque:

 location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php-fpm (or other unix sockets):
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

También te puede ocurrir justamente que se estén rechazando algunas rutas o archivos, con algún location de tipo "deny all".

location ~ /\.ht {
   deny all;
}

Los permisos en los ficheros también pueden ser un problema, así como el usuario dueño. Si no están bien asignados podrían ser un motivo de fallo. Recuerda que por seguridad los permisos correctos deberían ser 644 para ficheros y 755 para directorios. El usuario dueño de los archivos suele ser www-data. Esta configuración la puedes establecer con chmod y chown. Tienes explicaciones en estos artículos: Tutorial de chmod y si lo haces por FTP tienes este otro artículo Establecer permisos en FTP. Sobre el tema del propietario puedes leer la faq: Cambiar propietario con chown en Linux y saber cuál poner.

Puedes comprobar todo lo anterior, pero también tener en cuenta que en realidad el 403 puede deberse realmente a que se esté intentando acceder a un contenido realmente protegido, por lo que lo correcto sea justamente que el servidor te devuelva el 403. O que sea un directorio y no se encuentre el archivo index.html o index.php para servir.

Miguel Angel
3135 140 208 17