DAY008 – nginx API 路径配置错误
故障场景
故障现象:首页、nginx health、订单接口正常,但 /api/health 返回 404;直连 API health 正常
服务器状态:
server2:状态 INJECTED;开始时间 2026-07-19 22:01:49 +0800;影响范围 练习项目局部不可用,SSH 不受影响。。
排障过程
先看项目文档
## 真实项目结构
- nginx 程序:`/usr/sbin/nginx`
- systemd 服务:`nginx.service`
- nginx 配置:`/etc/nginx/sites-available/hermes-day008.conf`
- nginx 启用配置:`/etc/nginx/sites-enabled/hermes-day008.conf`
- nginx 日志:`/var/log/nginx/hermes-day008-access.log`、`/var/log/nginx/hermes-day008-error.log`
- 应用目录:`/opt/hermes-drills/day008`
- API 程序:`/opt/hermes-drills/day008/app/api.py`
- API 启动脚本:`/opt/hermes-drills/day008/start-app.sh`
- API 日志:`/opt/hermes-drills/day008/logs/api.log`
## 端口
- nginx:`18080`
- API:`127.0.0.1:18081`
先看本地实际情况
首页访问成功
nginx health与订单接口正常
确实经过nginx转发的/api/health报404
直连后端的api健康接口却正常
说明后端api程序是正常的,需要着重检查nginx的配置
不急,先看看api.log日志咋写的
我nginx配置中有missing-health相关配置
利用grep快速寻找关于missing-health的配置在哪一行
后补:这里还应该看API代码实际是怎么加载的,然后改成对应的格式,不能默认就猜人家程序里写的是health
api.py中确实是/health后缀
给sites-available和sites-enabled改回匹配的health即可
reload一下nginx就行了
本地和远程都可以访问
寻找根因
我开了日志审计,可以使用下面的命令寻找谁、何时修改了站点文件,致使发生404错误
sudo ausearch \
-k nginx_watch \
-i \
| grep -E "time->|uid=|auid=|comm=|exe=|proctitle="
实在太长太杂,不是人工输入的命令,像是脚本
19:16~22:02时间出现关键可疑命令:
proctitle=install -m 0644 -o root -g root /tmp/tmp.a41QtUtZ3T /etc/nginx/sites-available/hermes-day008.conf
proctitle=rm -f /etc/nginx/sites-available/hermes-day008.conf
install -m 0644 -o root -g root /tmp/tmp.vdhPBQCAXK /etc/nginx/sites-available/hermes-day008.conf
rm -f /etc/nginx/sites-available/hermes-day008.conf
install -m 0644 -o root -g root /tmp/tmp.wKT1l4yJ9y ...
执行账号:
auid=monika
实际权限:
uid=root
命令:
install
不是:
vim
nano
sed
cat >
疑似AI远程或者脚本所为
现在追查源头/tmp/tmp.a41QtUtZ3T
hsitory即使不找/tmp/tmp.a41QtUtZ3T,用history | grep nginx也找不到可疑点,说明404制造者没有手动操作终端。/tmp中也没有相关文件
大概率为远程AI或者脚本使用monika账户制造的404故障,可疑行为集中在2026/07/19 19:16~22:02
原文首发于个人博客:liujixiang.de5.net
- 点赞
- 收藏
- 关注作者
评论(0)