我php5-fpm
运行得很好。我的整个网站都按预期运行,几乎没有问题。但是,我无法使用 ping 和状态页面。当我导航到mydomain.com/status
或时,mydomain.com/ping
我收到错误(403、404、500,取决于配置)。
我对 LAMP 堆栈还很陌生。我在这方面遇到了很多困难,但我必须弄清楚。
我会在下面包含我认为相关的任何内容,但如果我错过了什么,请提示我,提前感谢您的耐心!
运行 Ubuntu 14.04
Apache 2.4
PHP 5.5
Apache 中启用的 Mods(至少是重要的 Mods):
- mpm_事件
- 快进快退
- 行动
- 别名
我将省略大部分 FPM 配置,因为它正在运行,但这里是 ping 和状态设置...非常原始的设置。
pm.status_path = /status
ping.path = /ping
监听套接字以减少 tcp/ip 开销......
listen = /var/run/php5-fpm.sock
我已经php5-fpm.conf
在 中配置了/etc/apache2/conf-available/
并在 中配置了符号链接conf-enabled
,其内容如下:
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
<LocationMatch "/(ping|status)">
SetHandler php5-fcgi-virt
Action php5-fcgi-virt /php5-fpm-handler.fcgi virtual
</LocationMatch>
</IfModule>
我发现的大多数文档都提到这是LocationMatch
使 ping 和状态页面正常工作所需的唯一修补程序。我不知道接下来该怎么办。我尝试了在网上能找到的所有方法,但都无济于事。我对文件进行了各种更改php5-fpm.conf
,但每次更改要么没有效果,要么导致我出现不同的错误。我遇到了内部服务器错误、权限问题等。使用此设置,我目前收到 500 内部服务器错误。
非常感谢所有帮助!
编辑于2015年2月9日:
阅读完本实用指南后这里我已将 php5-fpm.conf 中的 LocationMatch 替换为:
<FilesMatch "^ping|status$">
SetHandler php-script
</FilesMatch>
这并没有解决问题,但确实改变了效果。我现在收到 404 错误。仍然不确定我在这里遗漏了什么……
编辑于2015年2月10日:
我又回到了更流行的观念,即 是LocationMatch
正确的, 不会FilesMatch
让我更接近成功。同样,我对托管和 LAMP 服务器非常陌生,但我发现当我收到 404 错误(使用FilesMatch
)时,没有任何内容登录/var/log/apace2/error.log
,但当使用 时,LocationMatch
我仍然收到 500 错误,并且我得到了一个日志条目:
[Tue Feb 10 00:29:17.216917 2015] [core:error] [pid 8978:tid 140200547378944] [client IP:Port] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
我在网上搜索了一下,但找不到描述此问题修复方法的良好文档。有什么想法吗?
答案1
我也遇到过同样的问题。经过多次 Google 搜索和尝试,我终于找到了答案。
您需要将虚拟主机中设置的内容与 fastcgi.conf(php-fpm.conf)中配置的内容进行匹配。
此外,最好在 /etc/php5/fpm/pool.d/www.conf 配置中使用“/fpm-status”和“/fpm-ping”。这样就不会与 Apache 自己的“状态”页面发生冲突。
这是我的 fastcgi.conf:
<IfModule mod_fastcgi.c>
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
Order allow,deny
Allow from all
</Directory>
</IfModule>
这是我在 Apache 000-default.conf 中添加的内容:
<LocationMatch "/(fpm-ping|fpm-status)">
SetHandler php5-fcgi-virt
Action php5-fcgi-virt /php5-fcgi virtual
</LocationMatch>
如果您不限制对默认 Apache vhost 的访问,则应将其添加到 fpt-ping 和 fpm-status 的 LocationMatch 中:
Order deny,allow
Deny from all
Allow from <your-IP>
要允许每个虚拟主机使用 php-fpm,只需保留“标准”libphp.so,并将下几行添加到虚拟主机,以将所有 php 文件重定向到 php-fpm:
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-fastphp5
</FilesMatch>
祝 php-fpm 愉快!