两个tomcat服务器使用相同的端口,为iis重写规则

时间:2013-06-19 07:28:30

标签: tomcat iis url-rewriting reverse-proxy arr

我一直在使用ARR和重写规则来轻松访问我的Tomcat应用程序。

如果应用程序在:http://localhost:8090/alfresco

运行,则类似

在重写规则之后,可以访问:http://localhost/alfresco

以下是我一直使用的重写规则的一个例子:

<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
    <match url="(alfresco.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CACHE_URL}" pattern="^(http?)://" />
    </conditions>
    <action type="Rewrite" url="{C:1}://localhost:8090/{R:1}" />
</rule>

现在我遇到的问题是我有另一个本地服务器,它具有相同的tomcat应用程序名称和端口。现在我想开发一个重写规则,以便在我访问时:http://localhost/alfresco1

它应该带我到那个url为http://172.23.1.168:8090/alfresco

的服务器

1 个答案:

答案 0 :(得分:1)

您可以使用以下配置:

<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
    <match url="^(alfresco)1/?(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CACHE_URL}" pattern="^(http?)://" />
    </conditions>
    <action type="Rewrite" url="{C:1}://172.23.1.168:8090/{R:1}/{R:2}" />
</rule>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
    <match url="^(alfresco)/?(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{CACHE_URL}" pattern="^(http?)://" />
    </conditions>
    <action type="Rewrite" url="{C:1}://localhost:8090/{R:0}" />
</rule>

它的作用:

  • 如果网址以alfresco1开头,则会使用http://172.23.1.168:8090/alfresco/requested_path{R:1} back references将其重写为{R:2}
  • 如果网址以alfresco开头,则会使用匹配的字符串back reference将其重写为http://localhost:8090:8090/alfresco/requested_path

此配置基于the fact

  

规则按照指定的顺序进行评估

在配置文件中定义规则的顺序非常重要。