502错误本质是nginx未从php-fpm获取有效响应,应优先查看/var/log/nginx/error.log中“connection refused”“upstream timed out”“connection reset by peer”“permission denied”等关键报错,结合fastcgi_pass与php-fpm listen配置一致性、超时参数匹配及socket权限核查定位根因。

直接看 /var/log/nginx/error.log 里的报错线索,比盲目重启服务更高效。502 错误本质是 Nginx 没从 PHP-FPM 拿到有效响应,日志里藏着通信断在哪一环。
快速定位错误类型:盯住关键报错短语
打开错误日志,重点搜索这几类典型提示:
-
"Connection refused" → PHP-FPM 没在监听,或
fastcgi_pass地址写错了(比如端口对不上、socket 路径不一致) -
"upstream timed out" → 请求发过去了,但 PHP-FPM 处理太久没回,大概率是
fastcgi_read_timeout过小,或 PHP 脚本卡死/数据库慢查询 -
"Connection reset by peer" → PHP-FPM 进程中途崩溃退出,常见于内存不足、脚本 fatal error 或
request_terminate_timeout触发强制杀进程 -
"Permission denied" → Unix socket 文件权限不对,Nginx 工作进程用户(如
www-data)没读写权限
对照 PHP-FPM 配置验证通信参数
Nginx 和 PHP-FPM 必须“说同一种协议”,否则握手失败。检查两处是否严格一致:
- Nginx 配置中
fastcgi_pass的值(例如unix:/run/php/php8.1-fpm.sock或127.0.0.1:9000) - PHP-FPM 池配置(如
/etc/php/8.1/fpm/pool.d/www.conf)中listen =的路径或端口 - 若用 socket,确认
listen.owner、listen.group和listen.mode允许 Nginx 用户访问(常见设为www-data和0660)
超时与缓冲参数要协同调优
单改 Nginx 超时没用,PHP-FPM 侧也得跟上。三组参数需匹配:
- Nginx:
fastcgi_connect_timeout(连通耗时)、fastcgi_send_timeout(发请求耗时)、fastcgi_read_timeout(等响应耗时)——建议统一设为 300 - PHP-FPM:
request_terminate_timeout(脚本最大执行时间)应 ≥ Nginx 的fastcgi_read_timeout - 缓冲区:
fastcgi_buffer_size和fastcgi_buffers要能容纳 PHP 返回的响应头+体,大页面建议设为128k和4 128k
辅助验证:用命令行绕过 Nginx 直连 PHP-FPM
排除 Nginx 干扰,确认 PHP-FPM 自身是否健康:
- 查状态:
systemctl status php8.1-fpm看是否 active;ps aux | grep php-fpm看 worker 进程数是否接近pm.max_children - 测 socket:
sudo -u www-data curl --unix-socket /run/php/php8.1-fpm.sock http://localhost/(需 PHP-FPM 开启ping.path) - 测 TCP:
telnet 127.0.0.1 9000看端口是否通;再用echo -e "GET / HTTP/1.0\r\n\r\n" | nc 127.0.0.1 9000粗略验响应











