【问题标题】:Windows IIS ARR Reverse Proxy Encoding IssueWindows IIS ARR 反向代理编码问题
【发布时间】:2021-11-08 18:44:04
【问题描述】:

我们有一个带有 Windows 2019 Server IIS 10 的环境,它充当我的 IIS 服务器场(应用程序请求路由 3.0 和 URL 重写 2.1)的反向代理 (ARR)。我们在 HTTP 标头中发送用户名。但是我的 ARR 以某种方式搞砸了编码(我们使用的是德语特殊字符,例如 ö、ü、ß...),所以当我检查 WebServer 的响应时,它向我显示:H%C3%B6lmuth M%C3%A4 %C3%9Fterm%C3%BCller 而不是 Hölmuth Mäßtermüller。

我有一个与Windows 2012R2 Server相同配置的旧环境,在这个环境中名称的显示是正确的。我检查了新旧服务器之间的各种设置,但找不到任何区别。

此外,我还使用了失败的请求日志和网络监视器来查看服务器接收和发送的内容,在下面找到结果。

在 IIS ARR 上收到的请求(旧的和新的): X-AUTHENTICATE-FamilyName: M%C3%A4%C3%9Fterm%C3%Bcller X-AUTHENTICATE-GivenName:H%C3%83%C2%B6lmuth X-AUTHENTICATE-cn: H%C3%B6lmuth M%C3%A4%C3%9Fterm%C3%Bller

请求发送到 IIS(新): X-AUTHENTICATE-FamilyName: M%C3%A4%C3%9Fterm%C3%BCller X-AUTHENTICATE-GivenName:H%C3%83%C2%B6lmuth X-AUTHENTICATE-cn: H%C3%B6lmuth M%C3%A4%C3%9Fterm%C3%Bller

请求发送到 IIS(旧): X-AUTHENTICATE-FamilyName: Mäßtermüller X-AUTHENTICATE-GivenName:Hölmuth X-AUTHENTICATE-cn: Hölmuth Mäßtermüller

有人知道我可以如何改变这种行为吗?非常感谢您的帮助。

【问题讨论】:

    标签: iis proxy character-encoding header arr


    【解决方案1】:

    你能给我一个例子如何使用 {UNENCODED_URL} 变量。目前我们正在使用重写模块将请求路由到特定的服务器场,请参阅下面的规则:

     <rewrite>
            <globalRules useOriginalURLEncoding="true">
                <rule name="ARR_BPBP-DEV_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <action type="Rewrite" url="http://BPBP-DEV/{R:0}" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="bmi-bpbp-dev.vecos.at" />
                    </conditions>
                </rule>
                <rule name="ARR_BPBP-TEST_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <action type="Rewrite" url="http://BPBP-TEST/{R:0}" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="bmi-bpbp-test.vecos.at" />
                    </conditions>
                    <serverVariables>
                    </serverVariables>
                </rule>
            </globalRules>
    

    如何调整规则以使用 {UNENCODED_URL} 变量?

    【解决方案2】:

    尝试将useOriginalURLEncoding设置为false,在规则中使用{UNENCODED_URL}变量时,URL重写将不再对url进行编码。

    要将标志设置为转到 IIS 管理器,然后选择 Configuration Editor 并转到 system.webServer/rewrite/rules 部分,您将在其中找到 useOriginalURLEncoding 标志。

    【讨论】:

    • 感谢您回复 samwu。请检查上面的说明。
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2011-07-29
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2022-12-29
    • 1970-01-01
    相关资源
    最近更新 更多