Доступ запрещен (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_FILENAMEFastCGI param и установите его в соответствии с местоположением ваших файлов.в конфигурационный файл nginx включить
fastcgi_split_path_info ^(.+\.php)(/.+)$;в блоке местоположения, где определены все остальные параметры fastcgi.в вашем php.ini set
cgi.fix_pathinfoto1
обратите внимание, что вышеуказанное решение (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.