ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Nginx 502 Bad Gateway 排障指南

Nginx 502 Bad Gateway 排障指南 第一步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-port8080/tcp第三步后端服务是否正常响应即使 Tomcat 在运行、端口也开放了还要确认它是否能正常处理请求。测试连通性# 方法1curl 测试 curl -v http://127.0.0.1:8080 方法2telnet 测试 telnet 127.0.0.1 8080 方法3nc 测试 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-cmd、iptables、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-port8080/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
返回列表