求助:IIS 10经ARR代理后Strict-Transport-Security头部重复问题
解决ARR反向代理导致Strict-Transport-Security头部重复的问题
针对ARR反向代理场景下HSTS头部重复的问题,可通过以下方式排查解决:
1. 检查代理站点的HTTP响应头配置
打开IIS管理器,找到ARR代理对应的合作方域名站点,进入功能视图 → HTTP响应头,查看列表中是否存在Strict-Transport-Security头部。如果有,直接删除该配置——这很可能是代理站点额外添加了相同头部导致重复。
2. 修改源站web.config,先移除再添加HSTS头部
在源站的web.config中,确保添加HSTS头部前先移除可能存在的同名头部,避免重复叠加。修改后的配置如下:
<httpProtocol> <customHeaders> <remove name="X-Powered-By" /> <remove name="X-AspNet-Version" /> <remove name="MicrosoftOfficeWebServer" /> <remove name="MS-Author-Via" /> <remove name="Strict-Transport-Security" /> <!-- 先移除已有头部 --> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" /> </customHeaders> </httpProtocol>
这样无论代理环节是否提前添加了该头部,源站都会先清理再添加,保证最终响应只有一个HSTS头部。
3. 配置ARR出站规则,移除重复头部
如果上述方法无效,可在ARR代理站点的URL Rewrite中添加出站规则,自动合并重复的HSTS头部:
- 进入代理站点的URL Rewrite模块 → 出站规则 → 添加空白规则
- 规则名称设为
Remove Duplicate HSTS Headers - 匹配设置:
匹配范围选服务器变量,变量名称填RESPONSE_Strict_Transport_Security,模式填.* - 条件设置:添加条件,
变量选RESPONSE_Strict_Transport_Security,模式填^(.*?)(?:\s*,\s*\1)+$(匹配重复的相同HSTS值) - 操作设置:
操作类型选重写,值填{C:1},将重复值替换为单一实例
也可以直接将以下代码添加到代理站点web.config的<rewrite>节点下:
<outboundRules> <rule name="Remove Duplicate HSTS" stopProcessing="true"> <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" /> <conditions> <add input="{RESPONSE_Strict_Transport_Security}" pattern="^(.*?)(?:\s*,\s*\1)+$" /> </conditions> <action type="Rewrite" value="{C:1}" /> </rule> </outboundRules>
4. 检查ARR代理核心设置
打开IIS管理器的Application Request Routing Cache → Server Proxy Settings,检查Reverse rewrite host in response headers选项。若该功能开启后导致头部处理异常,可尝试关闭该选项,或调整相关代理配置参数。
内容的提问来源于stack exchange,提问作者CB_Ron
相关产品推荐
相关产品推荐

