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

PHP7.4-FPM搭配Nginx访问状态页时出现“Primary script unknown”错误求助

PHP7.4-FPM搭配Nginx访问状态页时出现“Primary script unknown”错误求助

你遇到的这个问题我之前维护老版本PHP服务器时也碰到过,结合你说的“相同配置在PHP8.2服务器正常”的情况,核心原因大概率是Nginx把状态页请求当成了普通PHP文件请求,或者PHP-FPM的状态配置没正确开启。给你几个针对性的排查和解决方向:

1. 给状态页请求单独配置Nginx Location块

如果你的Nginx里没有专门处理/status/show、/status/ping的规则,这类请求会被普通的PHP文件匹配规则(比如location ~ \.php$)接管,Nginx会去服务器上查找对应的物理脚本文件(比如$document_root/status/show.php),自然找不到就抛出“Primary script unknown”错误。

你需要在Nginx配置里添加一个优先级更高的Location块,专门处理状态请求:

location ~ ^/status/(show|ping)$ {
    fastcgi_pass unix:/usr/local/php74/sockets/domain.com;
    # 关键:告诉PHP-FPM这是状态查询请求,不需要找实际脚本
    fastcgi_param SCRIPT_NAME /status;
    fastcgi_param SCRIPT_FILENAME /status;
    include fastcgi_params;
    # 可选:添加IP限制,避免公开访问状态页
    allow 15.16.2.54; # 你的客户端IP
    allow 127.0.0.1;
    deny all;
}

注意这个块要放在普通PHP文件的Location之前,确保先被匹配到。

2. 确认PHP-FPM Pool开启了状态页功能

检查你PHP7.4服务器上的[domain.com] pool配置文件,确保存在开启状态页的参数:

pm.status_path = /status

这个参数是PHP-FPM识别状态请求的核心,如果遗漏或者路径写错,PHP-FPM就无法响应/status/xxx的请求。配置完成后记得重启PHP-FPM服务:

service php-fpm74 restart

3. 排查Socket权限与进程用户一致性

虽然你说配置和另一台服务器一致,但还是要核对以下几点:

  • 用ps aux | grep php-fpm确认PHP-FPM进程运行的用户是www(和pool配置里的user/group一致)
  • 用ps aux | grep nginx确认Nginx进程运行的用户也是www,这样Nginx才能正常读取/usr/local/php74/sockets/domain.com这个socket文件
  • 用ls -l /usr/local/php74/sockets/domain.com检查socket文件的权限是否为www:www

4. 验证fastcgi_params的参数覆盖问题

有些服务器的fastcgi_params文件里默认配置了SCRIPT_FILENAME,可能会覆盖你在Location里的设置。你可以把fastcgi_param SCRIPT_NAME和fastcgi_param SCRIPT_FILENAME放在include fastcgi_params;之后,确保它们的优先级更高。

备注:内容来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:38:05