DAY006 – nginx upstream 端口配置错误
【摘要】 故障场景故障现象:nginx health 正常,但 /api/health 和 /api/orders 返回 502;直连 API 正常服务器状态:server2:状态 INJECTED;开始时间 2026-07-17 05:00:23 +0800;影响范围 练习项目局部不可用,SSH 不受影响。 排障过程先看项目文档实际看nginx及API情况首页没问题api确实502网关错误看对应项...
故障场景
故障现象:nginx health 正常,但 /api/health 和 /api/orders 返回 502;直连 API 正常
服务器状态:
server2:状态 INJECTED;开始时间 2026-07-17 05:00:23 +0800;影响范围 练习项目局部不可用,SSH 不受影响。
排障过程
先看项目文档
实际看nginx及API情况
首页没问题
api确实502网关错误
看对应项目站点的nginx日志
sudo tail -n 30 /var/log/nginx/hermes-day006-error.log
当连接到负载均衡时,连接被拒绝了
我们首先看看api的18082端口开着没
再看看nginx相关18082端口的配置
18082端口对应的API程序没有运行起来,或者某一方的配置端口写错了
寻找正在运行的相关进程
ps -ef | grep -Ei "python|api" | grep -v grep
api进程存在但没有在监听,得看看它到底监听哪个端口,为什么没有监听18082
sudo lsof -Pan -p 129907 -i
-Pan:P显示数字端口,不转换服务名。a代表并且。n代表不解析域名/IP,查取更快,输出更准确-p 129907:取129907这个进程号代表的进程-i:只看网络连接
至此可以证明是upstream监听错了端口
修改upstream端口监听为18081再重载nginx
验证是否解决
内部访问通了
公网同样200
寻找根因
查看并记录上一次何时、谁更改的站点conf
没开audit的话可以用journalctl看今天内发生的关于nginx
sudo journalctl --since "today" | grep -Ei "hermes-day006\.conf|18082|nginx"
大概率是monika用户的脚本所为
将记录保存下来,事后问责
sudo journalctl --since "today" | grep -Ei "hermes-day006.conf|18082|nginx" | sudo tee /var/log/502_upstream.log > /dev/null
sudo tail -n 50 /var/log/nginx/hermes-day006-error.log | sudo tee /var/log/502_upstream_2.log >/dev/null
有audit并监控了nginx相关目录
sudo ausearch \
-f /etc/nginx/sites-enabled/hermes-day006.conf \
-ts today \
-i \
| grep -E "time->|uid=|auid=|comm=|exe=|proctitle="
可以精简显示今天谁、何时修改了站点文件
原文首发于个人博客:liujixiang.de5.net
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)