502 Bad Gateway 表示 Nginx 接收请求但无法从 PHP-FPM 获取响应,需逐层排查服务状态、配置一致性、资源限制及日志线索,重点验证 PHP-FPM 进程、监听方式、fastcgi_pass 配置、进程数限制和超时设置。

502 Bad Gateway 表示 Nginx(或其他网关)成功接收了请求,但无法从 PHP-FPM 获取有效响应。这不是页面代码或浏览器问题,而是 PHP 处理链路中断了。排查要从“Nginx → PHP-FPM”通信路径逐层验证,重点看服务状态、配置匹配、资源限制和日志线索。
确认 PHP-FPM 进程是否存活且监听正常
这是最常见原因:PHP-FPM 没启动、崩溃退出,或监听地址不匹配。
- 运行 sudo systemctl status php8.2-fpm(版本号按实际调整),确保显示 active (running)
- 检查监听方式:若用 Unix socket,执行 ls -l /run/php/php8.2-fpm.sock,确认文件存在,且属主/权限允许 Nginx 用户(如 www-data)读写
- 若用 TCP,运行 sudo ss -tlnp | grep ':9000',确认 php-fpm 进程正在监听该端口
- 临时验证连通性:在服务器上执行 curl -I --unix-socket /run/php/php8.2-fpm.sock http://localhost/(需 PHP-FPM 启用健康接口)或直接查看错误日志:sudo tail -f /var/log/php8.2-fpm.log
核对 Nginx 与 PHP-FPM 配置是否完全一致
一个字符错误(如多空格、少斜杠、协议混用)就会导致连接失败。
通过IB网关在Interactive Brokers上投资股票/ETF,使用与okx交易相同的人机确认环节,适用于用户请求检查时
- 打开站点配置(如 /etc/nginx/sites-enabled/default),定位到 location ~ \.php$ 块
- 检查 fastcgi_pass 值:Unix socket 必须是 unix:/run/php/php8.2-fpm.sock;TCP 必须是 127.0.0.1:9000 —— 不能写成 127.0.0.1:9000; 或 unix:///run/...
- 确认 include snippets/fastcgi-php.conf; 未被注释;若缺失,需手动补全关键参数,至少包含:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info; - 修改后务必执行 sudo nginx -t && sudo systemctl reload nginx
检查 PHP-FPM 资源限制是否触发熔断
高并发下子进程耗尽,PHP-FPM 拒绝新请求,Nginx 等待超时后返回 502。
- 查看池配置(如 /etc/php/8.2/fpm/pool.d/www.conf),重点关注:
pm = dynamic
pm.max_children = 20(2GB 内存建议 15–25,根据实际内存调整)
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10 - 检查日志中是否频繁出现:WARNING: [pool www] server reached pm.max_children setting —— 出现即说明进程数已满
- 同步检查 PHP 执行时间:max_execution_time(php.ini)和 fastcgi_read_timeout(Nginx)应匹配,避免因超时误判为失败
通过日志快速定位真实根因
别只看 502 页面,关键线索藏在日志里。先查 Nginx error.log,再结合 access.log 中的 upstream 字段交叉验证。
- 在 /var/log/nginx/error.log 中搜索关键词:
“Connection refused” → PHP-FPM 没监听或服务未启动
“upstream prematurely closed connection” → PHP-FPM worker 崩溃或异常退出
“upstream timed out” → 响应太慢,需调大 fastcgi_read_timeout - 在 /var/log/nginx/access.log 中找对应 502 请求行,关注:
upstream_status=:若为 - 或空,说明零响应;若为 500,说明 PHP-FPM 返回了错误,要查它自己的日志
upstream_addr=:确认连的是哪个 socket 或 IP:port
upstream_response_time=:是否接近或超过你设置的 timeout 值 - 同时打开 sudo tail -f /var/log/php8.2-fpm.log,观察是否有 WARNING 或 ERROR 级别报错,比如权限拒绝、路径不存在、内存分配失败等
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










