配置 fastcgi_pass 的核心是让 nginx 正确转发 php 请求,必须与 php-fpm 监听方式(unix socket 或 tcp)、权限及环境变量严格匹配,否则触发 502/504/404 错误;需先确认 listen 值,再按格式写 fastcgi_pass,配套 include fastcgi_params、设置 script_filename,并验证权限、服务状态与日志。

配置 fastcgi_pass 的核心是让 Nginx 知道“把 PHP 请求发给谁”,它不是独立生效的,必须和 PHP-FPM 的监听方式、权限、以及关键环境变量严格匹配。配错一个环节,就会出现 502、504 或 404。
确认 PHP-FPM 的监听方式
先看 PHP-FPM 实际监听在哪——这是 fastcgi_pass 的依据,不能凭空写。
- 打开 PHP-FPM 的 pool 配置文件(通常是
/etc/php/*/fpm/pool.d/www.conf),找到listen =这一行 - 如果值是
/run/php/php8.2-fpm.sock或/tmp/php-fpm.sock→ 用 Unix socket 方式 - 如果值是
127.0.0.1:9000或:9000→ 用 TCP 方式 - 注意:Windows 下还支持命名管道(如
unix://./pipe/php-cgi),但需 Nginx ≥1.19
写对 fastcgi_pass 的语法
格式必须与监听地址完全一致,路径/地址要写全,不能少斜杠或协议前缀。
- Unix socket:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;(开头必须有unix:,路径要和listen完全一致) - TCP 地址:
fastcgi_pass 127.0.0.1:9000;(不能写成http://或加端口以外的字符) - 确保该行在
location ~ \.php$ { ... }块内,且没有被注释或拼写错误
配套设置不能漏
fastcgi_pass 只是“发出去”,后面还要保证请求能被正确解析和执行。
- 必须包含标准参数:
include fastcgi_params; - 必须显式设置脚本路径:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;(很多 404 就是因为缺这一行) - 如果用 Unix socket,要确认 Nginx worker 进程用户(如
www-data)对 socket 文件有读写权限(ls -l /run/php/php8.2-fpm.sock查 owner/group/mode) - 如果用 TCP,检查
listen.allowed_clients = 127.0.0.1是否启用(默认开启,但若改过需确认)
验证通信是否通
别只 reload Nginx 就算完,要逐层验证。
- 运行
systemctl status php*-fpm确保服务已启动 - 用
ss -tuln | grep :9000或ls -l /run/php/*.sock确认监听已生效 - 临时用
curl -I http://localhost/test.php测试,同时查 Nginx error log 和 PHP-FPM log(路径见php-fpm.conf中的error_log) - 常见报错定位:
– “connect() to unix:... failed (13: Permission denied)” → socket 权限不对
– “connect() failed (111: Connection refused)” → PHP-FPM 没起来或监听地址不匹配
– “Primary script unknown” →SCRIPT_FILENAME路径拼错或文件不存在
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











