通过 IIS ARR 反向代理区分 tomcat 应用程序响应重写的调用 URL

通过 IIS ARR 反向代理区分 tomcat 应用程序响应重写的调用 URL

向 Serverfault 社区问好!

我在尝试配置 IIS 以在同一台机器上的两个 Tomcat 服务器上打开相应的管理器 APP 时遇到问题。

http://servername:8081/manager当我分别通过和http://servername:8080/manager(另一个 Tomcat)直接调用站点时,一切运行正常。

当我尝试将请求重定向到http://servername/manager7第一个 Tomcat 和http://servername/manager8第二个服务器时,噩梦就开始了。即使我调用 URL,HTML Resonse 中的链接也始终包含 /manager7/ http://servername/manager8...。

以下是我的重写规则。我在服务器级别设置它们。

<rewrite>
        <globalRules>
            <clear />
            <rule name="Tomcat7" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
                <match url="*7*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="Rewrite" url="http://wwwts02:8081/{R:1}{R:2}" />
            </rule>
            <rule name="Tomcat8" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
                <match url="*8*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="Rewrite" url="http://wwwts02:8080/{R:1}{R:2}" />
            </rule>
        </globalRules>
        <outboundRules>
            <clear />
            <rule name="Tomcat8" preCondition="Recognize Tomcat8" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
                <match filterByTags="A, Form, Img, Link, Script" pattern="/manager*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                </conditions>
                <action type="Rewrite" value="/manager8{R:1}" />
            </rule>
            <rule name="Tomcat7" preCondition="Recognize Tomcat7" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
                <match filterByTags="A, Form, Img, Link, Script" pattern="/manager*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                </conditions>
                <action type="Rewrite" value="/manager7{R:1}" />
            </rule>
            <preConditions>
                <preCondition name="Recognize Tomcat8">
                    <add input="{REQUEST_URI}" pattern="(.)*/(.*)8/(.*)" />
                </preCondition>
                <preCondition name="Recognize Tomcat7">
                    <add input="{REQUEST_URI}" pattern="(.*)/(.*)7(.*)" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>

有人能想到我还有其他选择吗?
我也尝试了 Microsoft 提供的 ISAPIRedirect.dll,但它似乎根本不支持重写 HTTP 响应。

请告诉我下一步该怎么做。
任何帮助都将不胜感激,如需进一步的信息,请随时询问。

抱歉,我的英语可能不好,因为我是德国人。

答案1

模式匹配*7*无效。它表示<nothing><any times>后面跟着<7><any times>,更清楚一点:它匹配所有内容,因为其中0 or more 7包含字符。

您可能想要匹配某些东西,例如(.*7.*)——用于允许引用的括号{R:1}

相关内容