我尝试获取 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
此外,请务必对其进行密码保护,以防止入侵者入侵,如此处所述
答案3
好奇先生对这个也是很好奇,php-fpm只关心SCRIPT_NAME
和SCRIPT_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_METHOD
、QUERY_STRING
和。 不用 就行。 通常您会有 ,SCRIPT_NAME
这样就可以了。SCRIPT_FILENAME
snippet/fastcgi-php.conf
fastcgi.conf