Назад | Перейти на главную страницу

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 admin@example.com

  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

Теперь у меня нет идей, где искать дальше. Какие-либо предложения?

По запросу, вот ответ с дополнительными пояснениями.

Ошибка «клиент отклонен конфигурацией сервера» имеет несколько очень конкретных причин, все из которых подробно описаны здесь. http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration

Как я упоминал в комментарии, блоки <Directory> не влияют ни на какие запросы, которые передаются через прокси, поскольку они влияют только на запросы, которые сам Apache сопоставляет с путем в файловой системе.

Ищите любые блоки Location или Files, которые разрешают / запрещают доступ к пути базового URI или файлам .php.

Я предложил решение, которое, похоже, сработало, заключалось в добавлении следующего блока к виртуальному хосту.

<Location />
  require all granted
</Location>

Я бы по-прежнему предлагал поискать другие блоки Location / Files в оставшейся части вашей конфигурации, поскольку должно быть что-то еще, из-за чего запросы были отклонены изначально. Добавление этого блока позволило запрошенному начать работу из-за способа, которым Apache объединяет такие типы блоков, как описано в следующей ссылке.

https://httpd.apache.org/docs/current/sections.html

Очень важно внести изменения в раздел, относящийся к версии Apache, которую вы запускаете.

Например, если вы используете 2.4, используйте 2.4:

Требовать все предоставлено