You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置PHP-FPM status页后返回空内容,如何排查解决?

排查PHP-FPM状态页返回空内容的步骤

这种情况我之前踩过不少坑,给你按优先级整理几个排查方向,基本能解决问题:

1. 先确认PHP-FPM的状态页配置是否真的生效

  • 首先检查对应站点使用的PHP-FPM池的配置文件(比如/etc/php/7.4/fpm/pool.d/www.conf),确保确实存在pm.status_path = /status这一行,别改错了池(比如改了default池但站点用的是www池)。
  • 改完配置后必须重启PHP-FPM服务,执行对应的命令:
    # Systemd环境
    systemctl restart php-fpm
    # 或者指定版本
    systemctl restart php7.4-fpm
    # SysVinit环境
    service php-fpm restart
    
  • 检查PHP-FPM的访问控制:如果是TCP监听(比如listen = 127.0.0.1:9000),要确保listen.allowed_clients = 127.0.0.1(允许本地访问);如果是Unix Socket,这个参数不生效,但要确保Socket的权限正确(比如属主是www-data:www-data,Nginx进程有权限读写)。
  • 重点排查security.limit_extensions:这个参数默认只允许处理带.php后缀的文件,而/status没有后缀,会被拦截!解决方法是在pool配置里修改:
    # 要么添加允许的后缀(生产环境推荐)
    security.limit_extensions = .php .php3 .php4 .php5 .php7
    # 或者完全放开(仅测试用)
    security.limit_extensions = 
    
    改完必须重启PHP-FPM。

2. 检查Nginx的转发配置是否正确

  • 必须用精确匹配的location块处理/status请求,避免被其他优先级更高的location(比如location ~ \.php$)拦截,配置示例:
    location = /status {
        # 替换成你的PHP-FPM Socket或TCP地址
        fastcgi_pass unix:/run/php/php-fpm.sock;
        # 关键:必须设为$fastcgi_script_name,而非$document_root$fastcgi_script_name
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
    }
    
    这里的核心是SCRIPT_FILENAME参数,因为/status不是真实存在的文件,PHP-FPM是通过这个参数识别要返回状态页的,如果设成了带文档根的路径,会出现“Primary script unknown”的错误,导致返回空内容。
  • 改完Nginx配置后要重载配置:nginx -s reload,并先验证配置合法性:nginx -t。

3. 直接测试PHP-FPM的状态页(跳过Nginx)

用cgi-fcgi工具直接连接PHP-FPM,验证状态页本身是否能正常返回内容:

# Unix Socket方式
SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /run/php/php-fpm.sock

# TCP方式
SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9000

如果这个命令能返回正常的状态内容(比如包含pool:、processes:等字段),说明问题出在Nginx配置;如果还是空的,那肯定是PHP-FPM的配置或权限问题,回到第一步重新排查。

4. 查看日志定位问题

  • 查看Nginx的错误日志(比如/var/log/nginx/error.log),如果有“Primary script unknown”的错误,就是SCRIPT_FILENAME配置错了。
  • 查看PHP-FPM的错误日志(比如/var/log/php-fpm/error.log),如果有“Access to the script '/status' has been denied (security.limit_extensions)”的错误,就是security.limit_extensions的问题。

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:22:29