【问题标题】:IIS Reverse proxy/Global URL Rewrite for "/api/" folder for all sites所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写
【发布时间】:2020-08-23 08:47:17
【问题描述】:

对于请求位于“/api/”文件夹中的任何站点,我想将任何请求反向代理到 IIS 实例。我设置了一个服务器场,并使用“*”通配符让反向代理为所有内容工作,但是当我想将范围限制为 RegEx 时,它不会重写/代理到后端服务器。我在 IIS 实例级别采取的步骤:

  1. 设置网络场 - 其中只有一台服务器 machine2
  2. 为“*”设置重写
  3. 针对“http://machine1/site1/api/api1”进行测试 - 已成功路由到 machine2/site1/api/api1
  4. 将入站规则从通配符更改为正则表达式
  5. 将模式更改为 '.(/./api/.*)'(不带单引号)
  6. 针对“http://sarjhennew10vm/site1/api/api1”进行测试
  7. 请求未路由到机器 2。

下面是我的 applicationHost.config [IIS 的根目录] 中的一个 sn-p。

    <rewrite>
        <globalRules>
            <rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
                <match url=".*(\/.*\/api\/.*)" />
                <action type="Rewrite" url="http://Farm1/{R:1}" />
            </rule>
        </globalRules>
    </rewrite>
    <proxy enabled="true" />

是否可以为特定文件夹的实例上的任何站点将全局 URL 重写到服务器场?

编辑:下面已回答 - 我附上一张图片以防其他人遇到此问题。测试模式对我来说并不清楚 - 并且计数器文档 found here

【问题讨论】:

    标签: iis url-rewriting reverse-proxy


    【解决方案1】:

    你的模式不对,你可以试试下面的代码,把rewrite url改成https://Farm1/{R: 0}

    <rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
        <match url=".*(\/api\/.*)" />
        <action type="Rewrite" url="https://Farm1/{R:0}" />
    </rule>
    

    【讨论】:

    • 成功了。我正在查看“测试模式”结果,该结果由捕获组 0 和 1 爆发。我认为通过放置组 r:1(只是“site1/api/api1”)它会解析为farm1/site1/api/api1,但是不是这样。确实 r:0,在测试模式中解析为 'machine1/site1/api/api1') 解析为我想要的。我不清楚,但它有效 - 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 2020-09-05
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2014-03-24
    • 2017-02-13
    • 2013-01-28
    相关资源
    最近更新 更多