IIS 反向代理出站规则重定向到外部服务器

IIS 反向代理出站规则重定向到外部服务器

我正在努力将 IIS 设置为反向代理。我已设置了两个内部站点(由 IIS 提供服务),分别称为 Payroll 和 Webmail,以及一个外部站点(由不同的 Web 服务器提供服务),分别称为 IPS。这三个站点都在本地主机上,但 Payroll 绑定到端口 12084,Webmail 绑定到端口 12085,IPS 绑定到端口 2080。然后我创建了三个入站规则,将 xyz.com/ips/、xyz.com/payroll/ 和 xyz.com/webmail/ 定向到各自的服务器。所有这些都运行正常。

    <rules>
        <rule name="Reverse Proxy to ips" enabled="true" 
            stopProcessing="true">
            <match url="^ips/(.*)" />
            <action type="Rewrite" url="http://localhost:2080/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>

            <rule name="Reverse Proxy to webmail" stopProcessing="true">
            <match url="^webmail/(.*)" />
            <action type="Rewrite" url="http://localhost:12084/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>

            <rule name="Reverse Proxy to payroll" stopProcessing="true">
            <match url="^payroll/(.*)" />
            <action type="Rewrite" url="http://localhost:12085/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>
        </rules>

然后,我编写了一条出站规则,该规则应修补 URL,以便它们可以从外部客户端工作。

            <rule name="Add application prefix" preCondition="IsHTML">
                <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, 
                  Img, Input, Link, Script" pattern="^/(.*)" />
                <conditions>
                    <add input="{URL}" pattern="^/(webmail|payroll|ips)/.*" />
                </conditions>
                <action type="Rewrite" value="/{C:1}/{R:1}" />
            </rule>
            <preConditions>
                <preCondition name="IsHTML">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>

问题就出在这里。Payroll 和 Webmail 运行良好:它们是测试站点,只包含指向自身的 href,修补正确。然而,IPS 则不同。您会看到,IPS/index.html 包含指向 /html/index.php 的重定向。

            <meta HTTP-EQUIV="REFRESH" content="0; url=/html/index.php">

现在我的问题来了。由于我不完全理解的原因,这个重定向没有得到修补,结果客户端最终进入了“永恒的牧场”。

我怀疑出站规则仅适用于 IIS 本身提供服务的站点,但不会影响外部服务器。我进一步怀疑,我可以通过将 IPS(localhost:2080)定义为“服务器场”中的服务器,并相应地调整出站规则来实现这一点。我想知道上述内容是否正确,如果正确,应该如何修补出站规则。

相关内容