【问题标题】:How to force IIS to use a specific value for the http host header during a rewrite如何在重写期间强制 IIS 为 http 主机标头使用特定值
【发布时间】:2021-02-19 15:38:52
【问题描述】:

我正在尝试创建一个重写规则,将网站配置为用作反向代理,但在将主机 http 标头设置为与重写中使用的域不同的预定义值时遇到了一些问题(目标是使用 IIS 作为反向代理,将 URL 转发到具有自定义主机值的 sendgrid)。

为了说明问题,我创建了 2 个名为 url 和 sendgrid 的网站,并使用绑定 url.com 和 sendgrid.net(我在 hosts 文件中为这些名称添加了自定义条目,以便名称可以得到解决)。现在,我需要将在 url 网站上收到的所有请求重定向到 sendgrid 网站,确保对 sendgrid 网站的请求将主机 http 标头设置为 url.com。我首先向 url 网站添加了一个重写规则,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{CACHE_URL}" pattern="^(https?)://" />
                    </conditions>
                    <action type="Rewrite" url="http://sendgrid.net/{R:1}" logRewrittenUrl="true" />
                    <serverVariables>
                        <set name="HTTP_HOST" value="url.madeira.gov.pt" />
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

applicationhost.config 文件也已更新,因此可以更改 HTTP_HOST:

<location path="url">
    <system.webServer>
        <rewrite>
            <allowedServerVariables>
                <add name="HTTP_HOST" />
            </allowedServerVariables>
        </rewrite>
    </system.webServer>
</location>

为了查看发生了什么,我激活了失败的请求跟踪,我注意到通过前面的规则定义的主机头文件没有应用。可以看到已经处理了规则并且处理了HTTP_HOST标头(SET_SERVER_VARIABLE),但是当请求被重写时,它总是将http主机设置为sendgrid.net(而不是设置为url.com):

那么,当 IIS 网站被配置为用作反向代理时,有没有办法强制对主机标头使用特定值?

【问题讨论】:

    标签: iis url-rewriting http-headers


    【解决方案1】:

    尝试按照以下步骤将 preserveHostHeader 设置为 true:

    1)打开IIS管理器,选择服务器节点。

    2)double clic 配置管理器。

    3) 从部分下拉选择 system.webServer/proxy

    4) 将 preserveHostHeader 设置为 true

    注意:如果您尝试更改请求标头,则无法使用 iis URL 重写规则。

    【讨论】:

    • 保留主机等级是行不通的,因为 sendgrid 会将其用作返回响应的域...这个 url 重写有点受限,对吧?
    • @LuisAbreu 此规则仅使用目标网址重写您的页面。充当反向代理时保留主机标头使用,以在构造发送到目标服务器的代理请求时保留并保留来自客户端浏览器的原始主机标头。默认为false。
    • 我已经尝试过了,但没有检查 http 标头。我可以说的是,使用邮递员并使用正确的 url 设置它(用 sendrgrid.net 替换自定义 url)并将 http 主机头强制为原始 url 会返回正确的 HTML。使用保留主机标头执行此操作会导致重定向到错误的 url
    • @LuisAbreu 如果您只想使用 url.madeira.gov.pt 作为 URL 并显示 sendgrid.net 内容,只需在 url.madeira.gov.pt site.you 设置反向代理规则有关保留主机标头stackoverflow.com/questions/14841986/… 的更多详细信息,请参阅此链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2020-04-10
    • 2011-02-06
    • 2015-11-16
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多