办公网内部分HTTP请求卡在pending状态的技术求助
办公网内Web请求时段性Pending问题排查求助
技术栈
- VPS(Ubuntu 20)
- ASP.NET Core、Identity Server 4
- ReactJS
- Nginx、Docker
- 路由器:Mikrotik rb4011igs+5hacq2hnd-in
问题现象
Web应用部署在VPS的80端口,办公网外(移动网络、VPN等)访问完全正常,但办公网内发起请求时,部分请求会卡在pending状态,且该状态仅出现在工作时段(9:00-18:00),路由器防火墙无流量拦截规则。
已尝试但无效的操作
- 禁用CORS
- 用Traefik替代Nginx
- 更换ISP
- 更换VPS
- 关闭杀毒软件、浏览器扩展、本地防火墙
- 更换浏览器
可临时解决问题的操作
- 绕过Nginx直接请求Web应用
- 将Nginx容器外部端口从80改为55643(内部端口保持80)
- 移除Nginx请求中的Bearer头
流量监控结果
通过客户端Wireshark和Nginx容器的tcpdump监控发现:
- Nginx成功接收请求,Web应用处理后返回响应,但客户端无法接收完整响应
- tcpdump显示响应会以数秒超时间隔多次发送给客户端
- Wireshark显示响应为分段传输
请求状态截图
- 成功请求:

- Pending状态请求:

排查思路与解决方案
1. 办公网时段性流量瓶颈排查
- 用Mikrotik自带工具
/tool bandwidth-monitor检查工作时段办公网出口带宽占用,重点关注80端口的流量峰值,确认是否存在带宽饱和 - 通过
/ip firewall connection print查看工作时段80端口的并发连接数,排查是否有内部设备(如爬虫、批量业务工具)发起大量请求导致端口队列拥堵
2. Mikrotik路由器配置异常排查
- 检查端口转发规则是否设置了
connection-limit参数,工作时段连接数达到阈值后触发丢包 - 调整TCP MSS匹配两端MTU:执行
/ip firewall mangle add action=change-mss chain=forward new-mss=1460 protocol=tcp tcp-flags=syn,解决分段传输丢包问题 - 优化TCP超时设置:执行
/ip tcp set keepalive-time=30000 keepalive-interval=5000,避免长连接堆积影响新请求转发
3. Nginx TCP层配置优化
- 调整代理缓冲区参数,适配分段传输场景:
proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; - 开启TCP传输优化参数:
tcp_nopush on; tcp_nodelay on;
4. Bearer头相关拦截排查
- 排查办公网内上网行为管理设备,确认是否在工作时段开启了HTTP请求头审计规则,导致携带Bearer头的响应被延迟
- 尝试在Nginx中对Bearer头进行Base64编码后传输,测试是否能绕过拦截
5. Docker网络模式测试
- 将Nginx容器从bridge模式改为host模式部署,避免容器端口转发在高并发时出现瓶颈
内容的提问来源于stack exchange,提问作者kseen
相关产品推荐
相关产品推荐

