php5-fpm ping 和状态页面出错?LimitInternalRecursion 错误?

php5-fpm ping 和状态页面出错?LimitInternalRecursion 错误?

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 愉快!

相关内容