You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Ingress 请求阻塞其他请求问题排查求助

问题排查与解决思路

1. 排查会话亲和性配置

如果Ingress或关联的Service配置了会话亲和(比如Ingress的nginx.ingress.kubernetes.io/affinity: cookie,或是Service的spec.sessionAffinity: ClientIP),同一客户端的所有请求会被绑定到同一个Pod。若Pod A被第一个sleep请求占用,后续请求也会被转发到该Pod,进而阻塞。

  • 解决:移除会话亲和配置,或确保后端Pod具备多并发处理能力。

2. 检查后端Pod的并发处理能力

如果你的后端应用是单进程单线程架构(比如默认配置的Python Flask/Django),即使Nginx发并行请求过来,应用本身也只能串行处理。第一个请求sleep60时,后续请求会排队等待。

  • 解决:调整应用的并发配置,比如用Gunicorn启动多worker进程,或切换为多线程模式。

3. 调整Nginx连接复用参数

Nginx默认会复用与后端Pod的连接,若连接池过小或Keep-Alive超时设置不合理,第一个长请求会占用连接,后续请求只能等待空闲连接。

  • 排查与解决:在Ingress中添加或调整以下注解:
    • nginx.ingress.kubernetes.io/proxy-connection-pool-size: "10":增大后端连接池大小
    • nginx.ingress.kubernetes.io/proxy-keepalive-timeout: "30s":缩短Keep-Alive超时,避免连接被长时间占用

4. 验证请求转发逻辑

用命令行工具同时发起多个请求,确认阻塞原因:

# 同时发起两个请求,分别指向不同路径
curl http://your-domain/ & curl http://your-domain/dashboard

如果两个请求都阻塞,说明是会话亲和或后端Pod单线程问题;如果第二个请求正常响应,那可能是浏览器的同域名并发限制(可忽略,因为你的场景是后续请求完全阻塞)。

5. 查看Nginx Ingress日志

通过日志确认请求转发的Pod目标:

kubectl logs -n ingress-nginx <nginx-ingress-controller-pod-name>

如果后续/dashboard请求也被转发到Pod A,说明是会话亲和配置导致;如果转发到了其他Pod仍阻塞,需排查其他Pod状态或网络问题。

内容的提问来源于stack exchange,提问作者GrasWindowWind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:14:53