配置IIS与Sophos UTM及URL Rewrite实现多站点内外DNS互通
解决方案:IIS配合Sophos UTM的端口重写配置
问题分析
你当前的核心问题在于:
- 原入站规则错误匹配了完整URL(IIS的
{URL}变量仅包含路径部分,而非完整域名+URL),导致重写失败触发404/500错误 - 出站规则仅处理HTML标签内的地址,未覆盖OIDC所需的JSON响应及跳转响应头,无法解决SiteB返回带444端口地址的问题
以下是针对你的场景的正确配置方案:
前提准备
确保已安装URL Rewrite 2.0和Application Request Routing (ARR),并在ARR的「服务器代理设置」中勾选「启用代理」。
SiteB的IIS重写配置(web.config)
将以下配置替换你原有的<rewrite>节点内容:
<rewrite> <allowedServerVariables> <add name="HTTP_X_FORWARDED_PROTO" /> <add name="HTTP_X_FORWARDED_HOST" /> <add name="HTTPS" /> <add name="SERVER_PORT_SECURE" /> </allowedServerVariables> <!-- 入站规则:将外部443请求转发到内部444端口 --> <rules> <rule name="SiteB_Inbound_Proxy" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="^siteb\.domain\.com$" /> <add input="{HTTPS}" pattern="^ON$" /> </conditions> <action type="Rewrite" url="https://siteb.domain.com:444/{R:1}" logRewrittenUrl="true" /> </rule> <!-- 修正反向代理后的协议识别,确保应用生成HTTPS地址 --> <rule name="Set_Forwarded_Proto" stopProcessing="false"> <match url=".*" /> <conditions> <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^https$" /> </conditions> <serverVariables> <set name="HTTPS" value="ON" /> <set name="SERVER_PORT_SECURE" value="1" /> </serverVariables> <action type="None" /> </rule> </rules> <!-- 出站规则:移除所有响应中的444端口 --> <outboundRules> <!-- 替换响应内容中的带端口地址(覆盖HTML、JSON、XML等文本类型) --> <rule name="SiteB_Outbound_RemovePort_FromContent" preCondition="NeedsPortRewrite"> <match filterByTags="None" pattern="http(s)?://siteb\.domain\.com:444/(.*)" /> <action type="Rewrite" value="http{R:1}://siteb.domain.com/{R:2}" /> </rule> <!-- 替换跳转响应头(Location)中的带端口地址 --> <rule name="SiteB_Outbound_RemovePort_FromLocation"> <match serverVariable="RESPONSE_Location" pattern="http(s)?://siteb\.domain\.com:444/(.*)" /> <action type="Rewrite" value="http{R:1}://siteb.domain.com/{R:2}" /> </rule> <preConditions> <preCondition name="NeedsPortRewrite"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/|application/json|application/xml" /> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^image/|audio/|video/" negate="true" /> </preCondition> </preConditions> </outboundRules> </rewrite>
配置说明
入站规则
- 通过
{HTTP_HOST}精准匹配SiteB的域名,避免影响其他站点 - 将外部HTTPS 443请求重写到内部444端口,保持路径不变
- 新增
Set_Forwarded_Proto规则,让IIS识别Sophos UTM转发的HTTPS请求,确保应用生成正确的HTTPS地址
出站规则
- 覆盖所有文本类型响应(包括OIDC的JSON配置),替换带444端口的地址
- 单独处理
Location响应头,避免登录跳转时出现带端口的地址 - 排除二进制文件(图片、音视频),提升重写效率
验证步骤
- 外部访问
https://siteb.domain.com/.well-known/openid-configuration,确认返回的所有Endpoint地址均不带444端口 - 测试SiteA的登录流程,确认跳转SiteB时地址为
https://siteb.domain.com - 验证内部访问,确保原有
siteb:444的访问路径仍能正常工作
内容的提问来源于stack exchange,提问作者Mike Mastro
相关产品推荐
相关产品推荐

