记录一下Ngnix 404问题排查

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

问题描述

开发环境前后端联调的时候,客户端访问后端服务报404错误,报错的现象其实很好判断,是ngnix转发到后端的服务报404找不到。

image.png

问题分析

在定位这个错误之前,你需要对自己公司网络分区和自己应用部署架构十分了解才行,否则还是比较难有头绪的。
比如我们发生问题场景的网络拓扑图大概如下图:

开发环境网络拓扑图.png

客户端用户操作页面一个请求主要流程
1、 后台客户端运营或者测试同学,访问一个管理页面,比如一个列表请求***/list
2、 打开network可以看到,会请求后端服务 http://***/list ,打到ngnix上
3、 然后ngnix路由转到内部服务的ngnix上面,
4、 网关做一些鉴权,白名单,限流等拦截过滤直接转发到后端应用的注册中心,调用后端服务

Ngnix 404问题排查步骤

1、直接本地ping域名, ping main-app.***.com, 看下对应ngnix的地址,联系运维同学查看日志,看 nginx 请求的 access.log

[06/Jun/2022:13:36:31 +0800] POST /opgw/deliver/api/demand/list HTTP/1.1 404 158 http://main-app.dev.***.com/DELIEVER/demand/list Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36 10.1.60.208 0.006 0.006"x_forwarded": "-"
复制代码

2、 检查域名指定的 upstream 访问的 server 端口号是否正确

请求的整个过程,域名的 upstream 配置的是一台 Nginx 服务器,页面客户端的请求访问打到nginx服务器上,然后转发的网关的服务上面。

image.png

netstat -anp | grep nginx 查看监听的端口号,因为我配置后端服务的端口号默认就是80所以这个也没有问题。

image.png

3、 检查后端服务是否可达

也就是上面图中ngnix转到到网关的服务, 10.10.195.187:8501 这个服务,我们可以直接在网页直接访问这个服务,不需要走ngnix转发,直接访问,果然也是报404错误。

最终确认,是因为后端同学服务的版本号发错了,导致部分服务不是最新代码,报的404错误。

猜你喜欢

转载自juejin.im/post/7106102763884380191
今日推荐