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

使用ARR的IIS反向代理部分请求返回502.3网关超时求助

解决IIS反向代理到Spree Commerce后端的502.3 Bad Gateway错误

问题背景

我们服务多个SaaS客户,其网站部署在Windows Server 2019的IIS上,后端基于Debian服务器、以Puma运行Spree Commerce。架构为客户端请求IIS服务器,再由IIS反向代理至Spree后端。目前约10%-15%的请求会出现IIS返回502.3 Bad Gateway错误,但刷新后可正常访问。排查发现请求并未到达Spree后端的Puma日志,启用IIS Failed Request Tracing(FRT)显示ARR_WEBFARM_NOT_ROUTED,HTTPERR日志记录为Connection_Dropped,相关日志片段如下:

#Software: Microsoft HTTP API 2.0
#Version: 1.0
#Date: 2023-12-29 09:26:57
#Fields: date time c-ip c-port s-ip s-port cs-version cs-method cs-uri streamid sc-status s-siteid s-reason s-queuename
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 POST /api/v2/storefront/cart 687 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/products?include=primary_variant%2Cimages%2Cdefault_variant&page=1&per_page=12 703 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/menus?locale=en&filter%5Blocation%5D=header&include=menu_items%2Cmenu_items.linked_resource%2Cmenu_items.icon 699 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/menus?locale=en&filter%5Blocation%5D=footer&include=menu_items%2Cmenu_items.linked_resource%2Cmenu_items.icon 701 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/cms_pages?filter%5Btype%5D=home&include=cms_sections.linked_resource 707 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/taxons?filter%5Broots%5D=true&include=parent%2Ctaxonomy%2Cchildren%2Cimage 695 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/products?include=primary_variant%2Cimages%2Cdefault_variant&page=1&per_page=12 693 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/cart?include=line_items%2Cvariants%2Cvariants.images%2Cbilling_address%2Cshipping_address%2Cuser%2Cpayments%2Cshipments%2Cpromotions 697 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:50:58 209.115.235.218 64176 10.50.7.10 443 HTTP/2 POST /api/v2/storefront/cart 711 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:51:28 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/taxons/2?include=products&fields%5Bproduct%5D=id 683 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:51:28 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/taxons/2?include=products&fields%5Bproduct%5D=id 747 - 7 Connection_Dropped CANbearhouse
2024-01-03 21:52:53 209.115.235.218 64176 10.50.7.10 443 HTTP/2 GET /api/v2/storefront/products?include=primary_variant%2Cimages%2Cdefault_variant&page=1&per_page=12 763 - 7 Connection_Dropped CANbearhouse

解决步骤

1. 调整ARR代理与连接池配置

IIS的ARR(Application Request Routing)连接复用或超时设置可能是核心问题:

  • 打开IIS管理器,进入服务器节点的Application Request Routing Cache,点击Server Proxy Settings;
  • 将Connection timeout从默认60秒延长至120秒,避免后端处理慢导致连接被提前断开;
  • 根据后端Puma的worker数量调整Max connection pool size(例如Puma有8个worker时,可设置为16),防止连接池耗尽;
  • 若后端支持HTTP/2,启用Enable HTTP/2 to backend servers,优化协议兼容性。

2. 修复Web Farm健康检查误判

如果使用Web Farm管理后端节点,健康检查配置可能误标记后端为不可用:

  • 配置健康检查的URL为Spree后端的存活接口(如/health),确保该接口稳定返回200状态码;
  • 延长健康检查的Timeout至10秒,调整Interval为30秒,避免因短暂波动误判;
  • 关闭Fail fast on server error选项,防止单次错误就将后端节点从路由池中移除。

3. 排查HTTP/2协议兼容性问题

日志中所有错误请求均为HTTP/2,需验证协议适配性:

  • 临时禁用IIS站点的HTTP/2(站点→绑定→编辑→取消勾选HTTP/2),测试错误是否消失;
  • 调整Debian服务器的TCP keepalive参数:编辑/etc/sysctl.conf,添加net.ipv4.tcp_keepalive_time=300,执行sysctl -p生效,避免防火墙主动断开空闲连接;
  • 检查Puma启动配置,确保使用tcp模式监听(如puma -b tcp://0.0.0.0:3000),而非unix socket,保证与IIS的TCP连接稳定。

4. 增大IIS连接与队列限制

Connection_Dropped可能源于IIS连接数或队列耗尽:

  • 修改注册表:打开HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters,新增或调整MaxConnections(建议设为10000)和MaxPendingAccepts(建议设为1000),重启HTTP服务生效;
  • 进入IIS站点的Advanced Settings,提高Connection Limits中的最大连接数至合适值(如5000)。

5. 验证网络与后端资源限制

  • 在IIS服务器上执行持续ping测试:ping -t 10.50.7.10,检查是否存在网络丢包;
  • 使用tracert 10.50.7.10排查链路节点是否有延迟或丢包;
  • 检查Debian服务器的文件描述符限制:执行ulimit -n,若数值较低(如1024),编辑/etc/security/limits.conf添加* soft nofile 65535和* hard nofile 65535,重启Puma生效,避免Puma无法新建连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:32:09