ApplicationRequestRouting无法连接URL,服务器浏览器可正常访问的问题求助
在IIS中使用ApplicationRequestRouting(ARR)和UrlRewrite v7.1.1980搭建反向代理至后端服务时,返回502.3 Bad Gateway错误,对应的事件日志如下:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/> <EventID>0</EventID> <Version>1</Version> <Level>3</Level> <Opcode>16</Opcode> <Keywords>0x100</Keywords> <TimeCreated SystemTime="2022-10-24T10:16:29.431Z"/> <Correlation ActivityID="{80000011-0002-F900-B63F-84710C7967BB}"/> <Execution ProcessID="6684" ThreadID="4080"/> <Computer>Computer1</Computer> </System> <EventData> <Data Name="ContextId">{80000011-0002-F900-B63F-84710C7967BB}</Data> <Data Name="ModuleName">ApplicationRequestRouting</Data> <Data Name="Notification">128</Data> <Data Name="HttpStatus">502</Data> <Data Name="HttpReason">Bad Gateway</Data> <Data Name="HttpSubStatus">3</Data> <Data Name="ErrorCode">2147954429</Data> <Data Name="ConfigExceptionInfo"/> </EventData> <RenderingInfo Culture="en-US"> <Opcode>MODULE_SET_RESPONSE_ERROR_STATUS</Opcode> <Keywords> <Keyword>RequestNotifications</Keyword> </Keywords> <freb:Description Data="Notification">EXECUTE_REQUEST_HANDLER</freb:Description> </RenderingInfo> <ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace"> <EventGuid>{002E91E3-E7AE-44AB-8E07-99230FFA6ADE}</EventGuid> </ExtendedTracingInfo> </Event>
但通过远程桌面登录服务器后,在服务器本地浏览器中可正常打开该后端服务URL,说明服务器与后端存在连通性,为何IIS反向代理无法连接?
事件日志中的ErrorCode: 2147954429对应十六进制0x80072EE5,即WININET_E_CANNOT_CONNECT,说明ARR发起的连接无法到达后端。本地浏览器能访问但IIS不行,核心差异在于运行身份、代理配置、权限环境不同,具体排查方向如下:
IIS应用池身份权限不足
IIS应用池默认使用ApplicationPoolIdentity或Network Service账户,这些账户的网络访问权限可能受限,比如无法访问后端服务的特定端口、或者后端服务需要NTLM/Kerberos身份验证时,应用池账户没有对应权限。
解决:尝试将应用池身份改为具有足够网络访问权限的本地账户或域账户,测试是否能正常连接;若后端需要Windows身份验证,需确保应用池账户被授权访问后端资源。ARR未绕过系统代理
本地浏览器可能配置了绕过代理的规则,而ARR默认会继承系统的代理设置。如果系统全局代理无法访问后端服务,就会导致ARR连接失败。
解决:在IIS管理器中打开Application Request Routing Cache → Server Proxy Settings,勾选Bypass proxy for local(如果后端是本地服务),或者在Proxy区域手动添加后端URL的绕过规则;也可以直接禁用ARR使用系统代理。后端服务绑定限制
后端服务可能仅绑定了localhost或特定IP,而ARR使用服务器的外部IP或主机名发起请求,导致连接被拒绝。本地浏览器访问时用localhost能成功,但ARR用服务器其他IP访问就失败。
解决:检查后端服务的监听地址,确保绑定了0.0.0.0或服务器的所有可用IP,允许来自ARR的请求进入。SSL/TLS配置不匹配
如果后端是HTTPS服务,ARR可能因为TLS版本不兼容、证书信任问题导致连接失败。本地浏览器会自动处理证书信任或TLS协商,但ARR的TLS配置可能未适配后端。
解决:在ARR的代理设置中,调整SSL Settings,确保启用的TLS版本与后端一致;如果后端使用自签名证书,需在服务器的受信任根证书颁发机构中导入该证书,同时在ARR设置中勾选Accept invalid certificates(仅测试环境使用,生产环境不建议)。防火墙或安全组的进程级限制
部分防火墙软件会针对进程设置访问规则,允许浏览器进程访问后端,但阻止了IIS的w3wp.exe进程访问。
解决:检查服务器上的防火墙(包括Windows Defender Firewall),添加允许w3wp.exe访问后端服务端口的出站规则。
内容的提问来源于stack exchange,提问作者sashoalm

