Nginx 502 Bad Gateway 排障指南
2026/9/6 8:07:13 网站建设 项目流程

第一步:Tomcat 是否在运行?

这是最直接的原因,80% 的 502 都是后端服务挂了。

检查命令:

sudo systemctl status tomcat ps -ef | grep tomcat
结果结论操作
服务未运行Tomcat 进程挂了启动 Tomcat
服务在运行继续下一步排查检查端口
第二步:端口 8080 是否开放?

Tomcat 虽然启动了,但端口可能没有监听(启动失败),或者被防火墙拦截。

检查端口:

sudo ss -tlnp | grep 8080
结果结论操作
没有输出Tomcat 没有正常监听端口查看 Tomcat 日志排查启动失败原因
有输出(LISTEN)端口正在监听继续下一步

检查防火墙:

sudo firewall-cmd --list-all
结果结论操作
ports: 8080/tcp端口已放行继续下一步
没有 8080防火墙拦截放行端口:sudo firewall-cmd --permanent --add-port=8080/tcp
第三步:后端服务是否正常响应?

即使 Tomcat 在运行、端口也开放了,还要确认它是否能正常处理请求。

测试连通性:

# 方法1:curl 测试 curl -v http://127.0.0.1:8080 方法2:telnet 测试 telnet 127.0.0.1 8080 方法3:nc 测试 nc -zv 127.0.0.1 8080
结果结论操作
返回正常 HTML后端正常检查 Nginx 配置
Connection refused后端进程挂了(端口没开)重启 Tomcat,查看日志
Connection timed out防火墙/网络拦截检查防火墙、SELinux、云安全组
无响应/超时后端处理太慢调大 Nginx 超时时间
第四步:检查 Nginx 错误日志

如果前面都没问题,最后一步就是看 Nginx 日志。

sudo tail -50 /var/log/nginx/error.log

关注这些关键词:

日志关键词中文含义根因
Connection refused连接被拒绝后端进程挂了
Connection timed out连接超时防火墙/网络问题
Permission denied权限拒绝SELinux 拦截
no live upstreams没有存活的后端所有后端都挂了
upstream timed out上游超时后端响应太慢

一键快速排查脚本

#!/bin/bash echo "========== 1. 检查 Tomcat 状态 ==========" sudo systemctl status tomcat --no-pager | head -5 echo "" echo "========== 2. 检查 8080 端口监听 ==========" sudo ss -tlnp | grep 8080 echo "" echo "========== 3. 测试后端连通性 ==========" curl -s -o /dev/null -w "HTTP状态码: %{http_code}\n" http://127.0.0.1:8080 --connect-timeout 3 echo "" echo "========== 4. 查看 Nginx 最近错误日志 ==========" sudo tail -10 /var/log/nginx/error.log

📋 故障成因速查表

Nginx error_log 报错故障原因解决方案
connect() failed (111: Connection refused)后端服务进程崩溃(端口没开)sudo systemctl start tomcat,查看 catalina.out 日志
connect() failed (110: Connection timed out)防火墙/网络拦截(端口被屏蔽)检查firewall-cmdiptables、SELinux、云安全组
Permission deniedSELinux 拦截sudo setenforce 0(测试),semanage port -a -t http_port_t -p tcp 8080(永久)
upstream timed out (110: Connection timed out)后端处理请求超时(业务慢或死锁)调大proxy_read_timeout,优化后端代码
no live upstreamsupstream 定义的所有服务器都挂了检查所有后端服务器,至少保证一台可用

🔧 常见解决方案

# 方案1:重启 Tomcat sudo systemctl restart tomcat #方案2:放行防火墙端口 sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
#方案3:调整 Nginx 超时时间(解决慢请求) # 在 location 块中添加: proxy_connect_timeout 60s; proxy_read_timeout 120s; proxy_send_timeout 60s; # 方案4:修复 SELinux sudo setenforce 0 # 临时关闭测试 sudo semanage port -a -t http_port_t -p tcp 8080 # 永久允许 sudo restorecon -Rv /opt/tomcat/ # 修复目录标签 # 方案5:重启 Nginx sudo systemctl restart nginx

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询