Nginx仅能加载3个页面,其余页面返回200状态但报错
问题分析与解决方案
核心判断:限流并非来自Nginx
你的Nginx配置中limit_req触发时,默认会返回503状态码,同时在错误日志中生成类似limiting requests, excess: ...的限流记录。但当前报错返回200状态码+自定义JSON格式提示,且Nginx错误日志无对应记录,说明这个限流逻辑是由后端的Node.js服务(node2上游集群)返回的,和Nginx限流无关。
排查步骤
- 检查Node服务的路由逻辑:重点核对
/contact路径的处理代码,以及404 fallback的实现,确认是否存在针对这些路径的独立限流规则(比如基于IP、请求频率的限制);对比首页、图片页、评论页的路由配置,看这些页面是否被排除在限流规则之外。 - 验证后端请求计数:在Node服务中添加日志,记录
/contact和404请求的IP、请求时间、累计次数,确认是否真的触发了后端设定的阈值;测试时更换不同IP访问/contact,判断是否是单IP维度的限制逻辑。 - 排除Nginx潜在影响:临时注释
location /中的limit_req zone=one burst=20 nodelay;配置,重启Nginx后再次测试,彻底确认Nginx未参与此次限流拦截;同时可以在Nginx的access.log中添加$upstream_response_status字段,查看后端返回的状态码是否为200,验证请求确实完整到达了Node服务。
修复方向
- 若后端存在特定路径的限流规则,调整阈值或将
/contact、404页面加入限流白名单。 - 检查后端限流逻辑是否存在bug(比如计数错误、时间窗口计算异常),导致正常请求被误拦截。
- 若404页面的限流是爬虫或异常请求触发,优化后端404处理逻辑,避免无差别限流。
内容的提问来源于stack exchange,提问作者Dyln01
相关产品推荐
相关产品推荐

