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:
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 enFALSE
era la única forma de hacerlo funcionar.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.Verifique su parámetro
SCRIPT_FILENAME
fastcgi y configúrelo de acuerdo con la ubicación de sus archivos.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.En su php.ini establezca
cgi.fix_pathinfo
en1
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.