IIS AAR - 用于反向代理的URL重写 - 如何发送HTTP_HOST

Rya*_*yan 27 asp.net iis url-rewriting iis-7.5 arr

尝试在几个后端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>
Run Code Online (Sandbox Code Playgroud)

已经尝试过设置服务器变量

    <!-- 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>
Run Code Online (Sandbox Code Playgroud)

但是唉总是返回默认绑定 - 任何想法?

Rya*_*yan 50

这篇文章有答案 - 使用IIS7应用程序请求路由修改标头

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

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

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
Run Code Online (Sandbox Code Playgroud)

  • 我在 IIS 8.5 的 UI 中找到了这个:服务器(或站点)&gt;配置编辑器&gt;system.webServer&gt;代理。不过,将上述内容复制到运行命令或命令行窗口中更容易/更快。 (2认同)

小智 11

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

在此输入图像描述