502错误是Nginx无法连接后端服务所致,需依次排查:一、确认后端进程运行及端口连通性;二、核对proxy_pass地址与代理头配置;三、检查防火墙及云安全组是否放行后端端口;四、分析Nginx错误日志定位具体失败原因;五、针对PHP站点验证php-fpm状态与socket配置。

如果您在宝塔面板中访问网站时遇到“502 Bad Gateway”错误,说明Nginx作为反向代理无法成功将请求转发至后端服务。该错误本质是网关通信失败,常见于Nginx与后端(如Spring Boot、PHP-FPM、Tomcat)之间的连接中断或响应异常。以下是系统性排查步骤:
一、确认后端服务是否正常运行
502错误的首要原因往往是后端服务未启动、崩溃或未监听预期端口。必须先验证服务进程是否存在且可响应。
1、登录服务器,通过SSH或宝塔终端执行命令检查Java后端是否在运行:
ps aux | grep java
2、若后端默认使用8080端口,执行以下命令测试本地连通性:
curl -I http://localhost:8080
3、若返回HTTP/1.1 200 OK,说明服务存活;若提示Connection refused或无响应,则后端未启动或端口被占用。
4、检查端口占用情况:
netstat -tlnp | grep :8080
5、如发现端口被其他进程占用,需终止冲突进程或修改后端配置端口。
二、检查Nginx反向代理配置是否正确
Nginx配置中proxy_pass地址必须与后端实际监听地址完全一致,包括协议、IP、端口及路径前缀,任何不匹配都将导致502。
1、进入宝塔面板 → 网站 → 对应站点 → 设置 → 配置文件
2、定位到location /或location /prod-api等代理块,确认proxy_pass值是否指向正确的后端地址,例如:
proxy_pass http://127.0.0.1:8080;
3、若后端部署在另一台服务器,proxy_pass必须使用真实内网IP或可路由域名,不可写localhost
4、检查是否遗漏关键代理头配置,缺失可能导致后端拒绝处理:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
5、保存配置后,点击“重载配置”而非仅“保存”,确保Nginx重新加载规则。
三、核查服务器防火墙与安全组策略
即使后端服务运行正常,若防火墙或云服务商安全组拦截了Nginx与后端间的通信端口,Nginx仍会因连接超时或拒绝而返回502。
1、检查本机防火墙是否放行后端端口(以8080为例):
firewall-cmd --list-ports | grep 8080
2、若未开放,执行:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
3、若服务器部署于阿里云、腾讯云等平台,必须同步检查云控制台中的安全组入方向规则,放行后端端口对内网IP(如127.0.0.1或服务器内网IP)的访问
4、验证Nginx能否从本机访问后端:
curl -v http://127.0.0.1:8080
5、若curl失败但ps显示Java进程存在,极大概率是防火墙或安全组阻断所致。
四、分析Nginx错误日志定位具体失败原因
Nginx错误日志包含连接失败的精确信息,如“Connection refused”、“Connection timed out”或“No route to host”,是判断故障环节的关键依据。
1、进入宝塔面板 → 网站 → 对应站点 → 日志 → 错误日志
2、查找最近的502相关条目,重点关注upstream部分,例如:
[error] ... connect() to 127.0.0.1:8080 failed (111: Connection refused)
3、若日志中出现(110: Connection timed out),说明网络可达但后端无响应,需检查后端负载、线程阻塞或GC停顿
4、若出现(113: No route to host),表明目标IP不可达,需核查跨服务器部署时的网络连通性
5、若日志中显示upstream prematurely closed connection,可能是后端主动关闭连接,需检查后端应用配置(如Spring Boot的server.connection-timeout)
五、验证PHP-FPM或其它运行环境服务状态
对于PHP类站点(如WordPress、DVWA),502常由php-fpm服务异常引发,而非Nginx本身配置问题。
1、进入宝塔面板 → 软件商店 → 找到已安装的PHP版本 → 点击“设置” → 查看“服务管理”状态
2、若显示“已停止”,点击“启动”;若显示“运行中”,点击“重启”
3、检查php-fpm监听方式:在PHP设置 → 配置修改 → 查看listen参数,若为unix:/tmp/php-cgi-74.sock,需确认Nginx配置中fastcgi_pass路径与此严格一致
4、若使用socket方式,检查socket文件权限:
ls -l /tmp/php-cgi-*.sock
5、确保socket文件属主为www,否则Nginx worker进程无法读写










