IIS配置HTTPS重定向触发ERR_TOO_MANY_REDIRECTS问题排查
问题成因
当使用ARR代理时,SSL卸载操作是在ARR层面完成的,后端IIS服务器接收到的所有实际请求都是HTTP协议,因此{HTTPS}服务器变量始终返回OFF。你的重定向规则依赖{HTTPS}判断是否触发重定向,导致即使用户已访问HTTPS,后端仍会不断发起重定向,最终形成无限循环。
修正方案
修改web.config中的重定向规则,改用ARR传递的X-Forwarded-Proto请求头判断原始请求的协议:
<rule name="http to https" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^(www.)?example\.com$" /> <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^https$" negate="true" /> </conditions> <action type="Redirect" url="https://example.com/{R:1}" redirectType="Permanent" /> </rule>
关键修改说明
- 替换判断变量:用
{HTTP_X_FORWARDED_PROTO}替代{HTTPS},ARR会将用户原始请求的协议(http/https)通过该请求头传递给后端IIS。 - 反向条件判断:添加
negate="true",表示当原始请求协议不是HTTPS时,才触发重定向逻辑。 - 优化重定向类型:建议将
redirectType改为Permanent(301状态码),既利于搜索引擎收录,也能让浏览器缓存重定向规则,减少后续请求开销。
额外验证步骤
- 确认ARR代理配置:在ARR服务器的IIS管理器中,进入服务器节点的Application Request Routing Cache → Server Proxy Settings,勾选"Enable proxy"和"Preserve client IP in the X-Forwarded-For header",确保
X-Forwarded-Proto等请求头被正确转发至后端。 - 测试重定向逻辑:使用浏览器开发者工具的Network面板,查看请求链路,确认HTTP请求会被重定向到HTTPS,而HTTPS请求能正常返回页面内容,无循环重定向。
内容的提问来源于stack exchange,提问作者Ferenc Moisi
相关产品推荐
相关产品推荐

