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

配置IIS与Sophos UTM及URL Rewrite实现多站点内外DNS互通

解决方案:IIS配合Sophos UTM的端口重写配置

问题分析

你当前的核心问题在于:

  1. 原入站规则错误匹配了完整URL(IIS的{URL}变量仅包含路径部分,而非完整域名+URL),导致重写失败触发404/500错误
  2. 出站规则仅处理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响应头,避免登录跳转时出现带端口的地址
  • 排除二进制文件(图片、音视频),提升重写效率

验证步骤

  1. 外部访问https://siteb.domain.com/.well-known/openid-configuration,确认返回的所有Endpoint地址均不带444端口
  2. 测试SiteA的登录流程,确认跳转SiteB时地址为https://siteb.domain.com
  3. 验证内部访问,确保原有siteb:444的访问路径仍能正常工作

内容的提问来源于stack exchange,提问作者Mike Mastro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:01:16