forbidden español nginx permissions fedora php http-status-code-403

español - Acceso denegado(403) para archivos PHP con Nginx+PHP-FPM



403 forbidden nginx español (6)

He pasado pocas horas en ese tema y, a pesar de la gran cantidad de publicaciones relacionadas, no puedo resolverlo. Tengo una caja de Fedora 20 con Nginx + PHP-FPM que funcionó bastante bien hasta hoy (después de que recargué php-fpm.service, supongo). Nginx está sirviendo archivos estáticos sin problemas, pero cualquier archivo PHP genera un error 403.

Los permisos son correctos, nginx y php-fpm se ejecutan bajo el usuario "nginx":

root 13763 0.0 0.6 490428 24924 ? Ss 15:47 0:00 php-fpm: master process (/etc/php-fpm.conf) nginx 13764 0.0 0.1 490428 7296 ? S 15:47 0:00 php-fpm: pool www nginx 13765 0.0 0.1 490428 7296 ? S 15:47 0:00 php-fpm: pool www nginx 13766 0.0 0.1 490428 7296 ? S 15:47 0:00 php-fpm: pool www nginx 13767 0.0 0.1 490428 7296 ? S 15:47 0:00 php-fpm: pool www nginx 13768 0.0 0.1 490428 6848 ? S 15:47 0:00 php-fpm: pool www

Los archivos servidos también se configuraron para el usuario nginx, incluso terminé chmoding 777 esos archivos para probar, pero aún así "Acceso denegado" para cualquier archivo PHP.

A continuación se muestra un servidor de mi configuración Nginx:

server { listen 80; server_name localhost; root /var/www/html; location ~ /.php$ { fastcgi_intercept_errors on; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

El grupo de PHP-FPM:

[www] ... listen = 127.0.0.1:9000 user = nginx group = nginx ...

Para las versiones:

php-5.5.11 (así como php-fpm-5.5.11 por supuesto)

nginx-1.4.7

Estoy agregando el registro de errores Nginx:

FastCGI sent in stderr: "Access to the script ''/var/www/html'' has been denied (see security.limit_extensions)" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxx.xxx.xxx.xxx"

Y precisa que security.limit_extensions es correcto, configúralo en: security.limit_extensions = .php .

Acerca de los permisos de ruta, se puede recorrer / var / www / html . ¿Qué me estoy perdiendo?


¡No olvide reiniciar el servicio php5-fpm después de cambiar php.ini!

service php5-fpm restart o servicio php5-fpm reload

fpm se reinicia php5, por lo que no es suficiente reiniciar nginx para que se apliquen los cambios.


Aquí hay algunas soluciones posibles:

  1. En su php-fpm www.conf, establezca security.limit_extensions a .php o .php5 o lo que sea que se adapte a su entorno. Para algunos usuarios, eliminar por completo todos los valores o establecerlo en FALSE era la única forma de hacerlo funcionar.

  2. En su archivo de configuración nginx, establezca fastcgi_pass a su dirección de socket (por ejemplo, unix:/var/run/php-fpm/php-fpm.sock; ) en lugar de su dirección de servidor y puerto.

  3. Verifique su parámetro SCRIPT_FILENAME fastcgi y configúrelo de acuerdo con la ubicación de sus archivos.

  4. En su archivo de configuración nginx incluya fastcgi_split_path_info ^(.+/.php)(/.+)$; en el bloque de ubicación donde se definen todos los demás parámetros de fastcgi.

  5. En su php.ini establezca cgi.fix_pathinfo en 1


Esto también podría suceder si no hay index.php en la raíz de su documento vhost.

Revise www_root parámetro www_root en su configuración nginx. Luego, vuelva a verificar que el archivo php al que está intentando acceder esté realmente allí.

En mi caso, tecleé incorrectamente la ruta de la raíz del documento vhost y lo apunté a un directorio vacío, obteniendo un 403.


Para referencia de aquellos que vienen más tarde: en la configuración de su sitio intente agregar: fastcgi_param PATH_INFO $ fastcgi_path_info; También mira lo que hace SELinux. Para desactivarlo: setenforce 0 Pero luego, averigüe qué script es el problema y vuelva a poner en setenforce 1


Puede estar relacionado con el selinux . Si usa la carpeta compartida de Virtual Box , no puede cambiar los permisos de acceso en esta carpeta en Linux. Por lo tanto, puede resolverlo después de cerrar selinux .


Tenga en cuenta que la solución anterior (establecer cgi.fix_pathinfo en 1 ) es una idea terrible . Consulte https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/ para obtener una buena descripción.

El problema probablemente se deba a que su aplicación depende de PATH_INFO. Habilite el registro de acceso de php para obtener más información sobre cómo se llama su aplicación para ayudarlo a solucionar este problema.

Una vez más, solo para estar seguros, la solución aceptada es una idea terrible y es probable que su sitio sea hackeado.