php-fpm状态页面不显示

php-fpm状态页面不显示

我尝试获取 php-fpm 状态页。当我在 Web 浏览器中打开 /status 页面或直接打开 fcgi 时,系统提示“未找到文件”。

你能帮忙吗——如何解决这个问题?

# grep -ER "status|ping" /etc/php5/* | grep -v ":;"
/etc/php5/fpm/pool.d/www.conf:pm.status_path = /status
/etc/php5/fpm/pool.d/www.conf:ping.path = /ping
/etc/php5/fpm/pool.d/www.conf:ping.response = pong 

# SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING=  REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php-fpm-www.sock
Primary script unknown
Status: 404 Not Found
Content-type: text/html

File not found.

# SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php-fpm-www.sock
Primary script unknown
Status: 404 Not Found
Content-type: text/html

File not found.

答案1

我刚刚遇到了同样的问题,我只想描述一下我需要做些什么才能让它工作。您没有分享有关您的 php-fpm 配置或 nginx 的许多详细信息(如果您将其用作 Web 服务器)。请注意,您可能需要在命令前使用 sudo/as root 运行以下说明,以获得修改文件或重新启动服务的权限。

在 php-fpm 配置中

vi /etc/php-fpm.d/www.conf

搜索状态路径指令并启用它

pm.status_path = /status

然后确保 nginx 可以调用此位置。在你的 nginx 站点配置中

vi /etc/nginx/conf.d/mysite.conf

添加

location ~ ^/(status|ping)$ {
     access_log off;
     #allow 127.0.0.1;
     #allow 1.2.3.4#your-ip;
     #deny all;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_pass 127.0.0.1:9000;
 }

请注意,上面我已注释掉允许和拒绝从任何 IP 启用状态页面的指令。确保在生产中未启用此功能。现在重新启动 nginx 和 php-fpm

sudo service nginx restart
sudo service php-fpm restart

从浏览器调用状态页面现在应该可以工作了

答案2

对于 php7.0 使用这些代码来启用状态。

在 /etc/nginx/sites-available/ 中的默认文件中

location /status {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    log_not_found off;
    }

取消注释 /etc/php/7.0/fpm/pool.d(位置)中 www.conf(文件)中的以下行

pm.status_path = /status

重启 nginx/php7.0

sudo systemctl restart nginx
sudo systemctl restart php7.0-fpm

现在在 Web 浏览器中,键入此地址以获取配置了 php7.0 的当前活动 Web 服务器中当前正在运行的 php 脚本的完整详细报告。

http://yoursite.net/status?html&full

此外,请务必对其进行密码保护,以防止入侵者入侵,如此处所述

https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04

答案3

好奇先生对这个也是很好奇,php-fpm只关心SCRIPT_NAMESCRIPT_FILENAME参数是否和setting的值对应pm.status_path

因此,以下是访问状态信息的最小 nginx 位置:

location = /a_random_path_here_ODY1NjY3Mj/fpm-status {
    include fastcgi_params;

    #'/status' is the value of pm.status_path in /etc/php/7.1/fpm/pool.d/www.conf
    fastcgi_param SCRIPT_NAME '/status';
    fastcgi_param SCRIPT_FILENAME '/status';

    fastcgi_pass   unix:/var/run/php/php7.1-fpm.sock;
}

通过明确说明参数值,状态页面位置可以称为任意名称,并且可以位于任何路径上,而不仅仅是/status。使用随机路径还有助于防止从各种扫描仪生成不必要的日志条目。

在生产设置中,显然会为位置添加allow/指令或密码保护,但以上是必要的最低限度的配置。deny

如果启用,可以对 ping uri(ping.path设置)执行类似的操作。

答案4

我在 Ubuntu 18.04 上使用 PHP 7.2 遇到了类似的问题。发现这些行最近被添加到默认snippet/fastcgi-php.conf

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

由于没有文件pm.status_path- 它返回 404;

因此,对我来说 - 我必须删除include snippet/fastcgi-php.conf

您仍然需要传递REQUEST_METHODQUERY_STRING和。 不用 就行。 通常您会有 ,SCRIPT_NAME这样就可以了。SCRIPT_FILENAMEsnippet/fastcgi-php.conffastcgi.conf

相关内容