Windows IIS ARR反向代理服务器编码问题

jogvjijk  于 2022-11-12  发布在  Windows
关注(0)|答案(3)|浏览(216)

我们有一个使用Windows 2019 Server IIS 10的环境,该环境充当反向代理(ARR)用于我的IIS服务器场(应用程序请求路由3.0和URL重写2.1)。我们在HTTP头中发送用户名。但是我的ARR不知怎么搞砸了编码(我们使用的是德语特殊字符,例如ö,ü,ß...),所以当我检查WebServer的响应时,它显示:H%C3%B6lmuth M%C3%A4%C3%9Fterm%C3%BCller代替了霍尔穆特·梅斯特米勒。
我有一个配置相同的Windows 2012 R2 Server的旧环境,在这个环境中名称的显示是正确的。我已经检查了旧服务器和新服务器之间的各种设置,但没有发现任何差异。
此外,我已经使用失败的请求登录和网络监视器,看看什么服务器接收和发送,下面找到的结果。
在IIS ARR上收到的请求(旧的和新的):X-身份验证-系列名称:M%C3%A4%C3%9Fterm%C3%Bcller X-身份验证-给定名称:通过X-验证-cn:第三节
请求发送到IIS(新):X-身份验证-系列名称:M%C3%A4%C3%9Fterm%C3%BC证书颁发者X-身份验证-给定名称:通过X-验证-cn:第三节
发送到IIS的请求(旧):X-身份验证-系列名称:最高条款X-认证-给定名称:赫尔穆特X-认证-cn:赫尔穆特·梅斯特米勒
有人知道我该如何改变这种行为吗?帮助将不胜感激。

6jjcrrmo

6jjcrrmo1#

您能给予我一个如何使用{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}变量?

rt4zxlrg

rt4zxlrg2#

当HTTP请求到达Windows时,最新的HTTP.sys会对URL和HTTP标头进行编码,并将原始URL放入UNENCODED_URL服务器变量中,以便以后可以恢复。
然而,原始头文件(如X-AUTHENTICATE-FamilyName: Mäßtermüller)似乎没有被保留(没有明确的文档),因此没有任何简单的方法来恢复它们。
如果您想将头从X-AUTHENTICATE-FamilyName: M%C3%A4%C3%9Fterm%C3%BCller修改回X-AUTHENTICATE-FamilyName: Mäßtermüller,我能想到的唯一方法是编写一个自定义IIS模块来执行解码步骤。
或者,您可以修改其他代码以接受这样的编码头值(并在代码中需要时对它们进行解码),因为无论如何,这就是Windows/IIS现在的行为方式,您无法与之对抗。

vs91vp4v

vs91vp4v3#

请尝试将useOriginalURLEncoding设置为false,在规则中使用{UNENCODED_URL}变量时,URL重写将不再对URL进行编码。
要设置标志以转到IIS管理器,请选择Configuration Editor并转到system.webServer/rewrite/rules部分,在那里您将找到useOriginalURLEncoding标志。

相关问题