Доступ запрещен (403) для PHP файлов с Nginx + PHP-FPM
Я потратил несколько часов на этот вопрос, и, несмотря на большое количество сообщений, связанных с ним, я не могу его решить. У меня есть коробка Fedora 20 с Nginx + PHP-FPM, которая работала довольно хорошо до сегодняшнего дня (после перезагрузки php-fpm.обслуживание я предполагаю). Nginx обслуживает статические файлы без проблем, но любой файл PHP вызывает ошибку 403.
разрешения в порядке, nginx и php-fpm работают под пользователем "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
обслуживаемые файлы были установлены в пользователь nginx также, я даже закончил chmoding 777 эти файлы, чтобы попробовать, но все же "Доступ запрещен" для любых файлов PHP.
ниже находится сервер моей конфигурации 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;
}
}
пул PHP-FPM:
[www]
...
listen = 127.0.0.1:9000
user = nginx
group = nginx
...
для версии:
php-5.5.11 (а также php-fpm-5.5.11 конечно)
nginx-1.4.7
я добавляю журнал ошибок 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"
и точны, что security.limit_extensions
правильно, установлено: security.limit_extensions = .php
.
о разрешениях путь, в/var/www в/в HTML можно пройти. Что я упускаю?
6 ответов
вот некоторые возможные решения:
в вашем php-fpm www.conf set
security.limit_extensions
до.php
или.php5
или все, что подходит вашей среде. Для некоторых пользователей полностью удалите все значения или установите его вFALSE
был единственный способ заставить его работать.в вашем конфигурационном файле nginx set
fastcgi_pass
на ваш адрес сокета (например,unix:/var/run/php-fpm/php-fpm.sock;
) вместо адреса сервера и порта.проверить
SCRIPT_FILENAME
FastCGI param и установите его в соответствии с местоположением ваших файлов.в конфигурационный файл nginx включить
fastcgi_split_path_info ^(.+\.php)(/.+)$;
в блоке местоположения, где определены все остальные параметры fastcgi.в вашем php.ini set
cgi.fix_pathinfo
to1
обратите внимание, что вышеуказанное решение (set cgi.fix_pathinfo
до 1
) является Грозный идея. Смотри https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/ для хорошего обзора.
проблема, вероятно, заключается в том, что ваше приложение полагается на PATH_INFO. Включите ведение журнала доступа для php, чтобы получить дополнительные сведения о вызове приложения для отладки этой проблемы.
раз опять же, просто чтобы быть уверенным - принятое решение является Грозный идея, и, скорее всего, ваш сайт будет взломан.
Не забудьте перезапустить службу php5-fpm после изменения php.Ини!!
сервис рнр5-бутадиен-перезагрузка или услуги в php5-бутадиен-перезагрузка
бутадиен prestarts рнр5 так это не достаточно, чтобы перезапустить nginx для применения изменений.
для справки о тех, кто придет позже: В conf для вашего сайта старайтесь добавлять: fastcgi_param переменной path_info $fastcgi_path_info; Также посмотрите, что делает SELinux. Чтобы отключить его: setenforce 0 Но тогда выясните, какой скрипт является проблемой и верните setenforce 1
Это также может произойти, если нет index.php
в корне документа vhost.
Внимательно проверьте www_root
параметр в конфигурации nginx. Затем дважды проверьте, что файл php, который вы пытаетесь ударить, на самом деле там.
в моем случае я неправильно набрал корневой путь vhost doc и поэтому указал его на пустой каталог, получив 403.
Это может быть связано с настройки SELinux. Если вы используете общий папку of Виртуальный Бокс, вы не можете изменить разрешения доступа в этой папке в Linux. Таким образом, вы можете решить после закрытия настройки SELinux.