无法使 IIS 反向代理重写正常工作

无法使 IIS 反向代理重写正常工作

我们能够让反向代理的基本功能正常工作。它会重定向到内部网络服务器,然后您就可以返回网页。因此入站规则有效。

但是出站重写规则却没有……

这是生成的 HTML 的第一部分:

   <!DOCTYPE html>
   <html lang="en" class="main">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <base href="http://10.1.1.111/?_version=11.0.0.614" />
        <title>Crappy Webapp</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content="">

而且所有链接都是基于“基本 href”的“链接 href”,因此每次资源查找都会中断。由于某些难以理解的原因,我们无法让重写规则将该死的内部 IP 重写为公共域名。

我们已经关闭了缓存。(适用于有同样问题的另一项服务。)我们尝试了十亿种规则变体和先决条件,但我们预期的正确方法却不起作用。- 我们以 Base(和所有其他标签)为目标,匹配模式为 ^http(s)?://10.1.1.111/(.*) - 正则表达式 - 测试模式匹配。重写为“http{R:1}://service.domain.com/{R:2}

前提条件设置为 pattern="^text/html" 和 pattern="^text/css"。

如果这很重要的话,看起来该应用程序使用大量的 javascript 生成 HTML。

我意识到很难/不可能说出这里的问题是什么,但也许有人偶然发现了类似的问题并解决了它。

答案1

我的更聪明、更顽强的同事找到了解决方案!

简而言之,问题似乎在于匹配(和重写)的模式不是以“http://”开头,而只是没有 http:// 前缀的域和内部 IP——我希望其他人可以从中吸取教训。:)

所以这是完整的工作 webconfig 代码 - URL 和 IP 发生变化以保护无辜者。:)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <clear />
                <rule name="Rewrite Realtive Paths">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="http://10.1.1.10" />
                    <action type="Rewrite" value="http://server.domain.com/" />
                </rule>
                <preConditions>
                </preConditions>
            </outboundRules>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://10.1.1.10/{R:1}" logRewrittenUrl="true" />
                    <serverVariables>
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

相关内容