29

尝试在多个后端 IIS 服务器前使用 AAR 作为反向代理。

  • 分配给运行 IIS/AAR 的服务器的一个公共 IP 地址

  • 然后设置出站 URL 重写规则以根据主机名重定向到多个后端服务器之一。

有点工作,但总是返回后端服务器默认站点(不是映射到主机名的站点),因此看起来主机名(HTTP_HOST)没有从代理服务器传递到后端服务器。

(我已经通过编辑主机验证绕过反向代理,后端服务器返回绑定到主机头的正确站点)

这是一个规则示例(192.168.0.99 是内部服务器,site.myco.com 是主机名)

    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://192.168.1.99/{R:1}" />                   
            </rule>
        </rules>
    </rewrite>

尝试过放置服务器变量

    <!-- Guessing server.myco.com is hard coded -->
    <serverVariables>
        <set name="HTTP_HOST" value="server.myco.com" />
    </serverVariables>

    <!-- Guessing picked up dynamically from incoming request host header -->
    <serverVariables>
        <set name="HTTP_HOST" value="{HTTP_HOST}" />
    </serverVariables>

但唉总是返回默认绑定 - 有什么想法吗?

4

3 回答 3

58

这篇文章有答案 - Modifying headers with IIS7 Application Request Routing

需要启用 preserveHostHeader - 在 UI 中看不到你是如何做到的,但这有效

从命令行运行它以更新 Machine/webroot/apphost 配置

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
于 2013-02-12T22:15:06.693 回答
3

您可以使用 GUI 执行此操作。在根服务器上单击配置编辑器,转到 System.webServer -> 代理并将 preserveProxyHeader 设置为 true。

在此处输入图像描述

于 2021-05-27T13:36:42.923 回答
2

我的猜测是您的服务器不允许您HTTP_HOST在重写 URL 时更改服务器变量。

在应用 URL 重写的网站级别:

网管

然后单击Add...右侧选项卡上的链接并添加您的HTTP_HOST变量:

添加 HTTP_POST

于 2013-02-12T22:09:16.700 回答