我或多或少按照本教程配置了一个网络服务器(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”所有。 Web 服务器和“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
现在我不知道下一步该去哪里了。有什么建议吗?
答案1
根据要求,以下是答案并附带一些额外的解释。
“服务器配置拒绝客户端”错误有一些非常具体的原因,所有这些原因都在此处详细说明http://wiki.apache.org/httpd/ClientDeniedByServerConfiguration
正如我在评论中提到的,<Directory> 块不会影响任何代理的请求,因为它们只影响 Apache 本身映射到文件系统路径的请求。
查找允许/拒绝访问基本 URI 路径或 .php 文件的任何位置或文件块。
我提出的解决方案似乎有效,那就是向虚拟主机添加以下块。
<位置 /> 要求所有授予 </位置>
我仍然建议在配置的其余部分中查找其他 Location/Files 块,因为可能还有其他原因导致请求最初被拒绝。添加此块允许请求开始工作,因为 Apache 合并这些类型的块的方式如以下链接中所述。
答案2
在与您运行的 Apache 版本相关的部分中进行更改非常重要。
例如如果您正在运行 2.4 那么使用 2.4:
要求所有已授予