authz_core продолжает отказывать в доступе
Я настроил веб-сервер более или менее в соответствии с этим руководством ( https://wiki.apache.org/httpd/PHP-FPM) и не могу заставить PHP работать. HTML-файлы обслуживаются нормально. Я получаю следующее сообщение об ошибке:
mod_authz_core.c(802): [client <myip>:36570] AH01626: authorization result of Require all denied: denied
mod_authz_core.c(802): [client <myip>:36570] AH01626: authorization result of <RequireAny>: denied
127.0.0.1 [client <myip>:36570] AH01630: client denied by server configuration: proxy:fcgi://127.0.0.1:9000/var/www/html/test.php
Вот мой PHP-файл:
www@<server>:/var/www/html$ ls -l
-rw-rw---- 1 www www-data 26 Sep 6 09:14 test.php
Как видите, файл принадлежит "www". Веб-сервер и "php-fpm" работают как "www-data".
Вот базовая конфигурация из "apache.conf":
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Вот конфиг для моего виртуального хоста:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel debug
CustomLog /var/log/apache2/access.log combined
ServerSignature Off
# Enable forwarding of php requests via php-fpm
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/$1
</VirtualHost>
У меня сложилось впечатление, что часть "Требовать все предоставлено" будет препятствовать доступу к файлу php, и mod_authz будет доволен этим.
Я уже проверил, что "php-fpm" прослушивает как следует:
www@<server>:/etc/php5/fpm/pool.d$ netstat -an | grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Теперь у меня нет идей о том, где искать дальше. Какие-либо предложения?
2 ответа
По запросу, вот ответ с некоторыми дополнительными объяснениями.
Ошибка "клиент отклонен конфигурацией сервера" имеет несколько очень специфических причин, все из которых подробно описаны здесь http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration
Как я упоминал в комментарии, блоки
Найдите все блоки Location или Files, которые разрешают / запрещают доступ к базовому пути URI или файлам.php.
Решение, которое я предложил и которое, похоже, сработало, заключалось в добавлении следующего блока в виртуальный хост.
<Местоположение /> требовать все предоставленное
Я бы по-прежнему предлагал поискать другие блоки Location / Files в оставшейся части вашей конфигурации, так как должно быть что-то еще, что первоначально вызвало отклонение запросов. Добавление этого блока позволило запрошенному начать работать из-за способа, которым Apache объединяет блоки такого рода, как описано в следующей ссылке.
Очень важно внести изменения в раздел, относящийся к используемой вами версии Apache.
Например, если вы используете 2.4, тогда используйте 2.4:
Требовать все предоставленные