在IIS中创建反向代理

3

我正在尝试通过IIS设置反向代理,以便在第一方主机名上提供第三方JavaScript文件。我已将ARR模块安装到IIS中,并创建了一个URL重写规则,但由于某种原因它没有生效。我还进入了IIS中的ARR模块,并确保在“服务器代理设置”部分中设置了“启用代理”。

实质上,我需要响应我的域名请求。

http://my.local.com/iojs/dyn_wdp.js

但实际上是从以下位置提供文件:

https://third.party.com/latest/dyn_wdp.js

我的URL重写规则如下:
<rule name="reverseproxy" stopProcessing="false">
  <match url="^(.*)iojs/(.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="https://third.party.com/{R:2}" appendQueryString="false" />
</rule>

然而,当我点击时。
http://my.local.com/iojs/dyn_wdp.js

在我的浏览器中,我仍然在asp.net MVC中遇到控制器未找到的异常。

更新:我注意到如果我将操作类型更改为重定向(301),它可以工作,但这会在客户端上重定向,这不是我想要的。我需要进行重写,以便JS似乎是从我的服务器提供的。

有人做过这种事情吗?如果有,我漏掉了哪一步?


这个第三方域完全独立于您的网络之外,对吗? - DavidG
是的,没错。这是一个完全独立的网络。 - LDJ
我不确定你能以那种方式使用ARR。我想重写规则将https://third.party.com/... URL传递给您的IIS服务器,由于它不负责提供该域,因此实际上会返回404错误。 - DavidG
1
我也在研究和你一样的问题。情况相同。不过你的正则表达式让所有东西都对我起作用了。在那之前,即使规则测试器说它有效,它也无法匹配规则。 - amd989
请问 dyn_wdp.js 的目的是什么? - Venkata Dorisala
2个回答

0

不确定是否会有所改变,但这是我成功使用的规则。

<rule name="ReverseProxy" enabled="true" stopProcessing="true">
  <match url="^(.*)iojs/(.*)" />                  
  <action type="Rewrite" url="https://third-party.com/{R:2}" appendQueryString="false" logRewrittenUrl="true" />                
</rule>

基本上和你的一样。

我这样称呼它:

http://my.local.com/iojs/latest/dyn_wdp.js

这将创建以下匹配项:

  • {R:0} /iojs/latest/dyn_wdp.js
  • {R:1} /iojs/latest/dyn_wdp.js
  • {R:2} latest/dyn_wdp.js

因此,规则将成功重写为:

https://third-party.com/ + latest/dyn_wdp.js > 200 OK

请注意 URL 中的latest,因为如果您不包括它,它会导致错误的重写:

https://third-party.com/ + dyn_wdp.js > 404 Not Found

我在网站中只有一个规则,如果您在虚拟目录中执行此操作,则无法正常工作。

另外,请参考此安装指南: https://blogs.iis.net/erez/new-features-in-arr-application-request-routing-3-0

  1. 在提升的命令提示符窗口上运行命令 net stop was 和 net stop wmsvc 停止 IIS

  2. 安装 URL 重写 (v2)

  3. 安装 Web Farm Framework (v1)

  4. 安装 ARR (v3)

  5. 安装外部缓存模块 (v1)

确保您有外部缓存模块 (现在是 v1.1),因为在我的情况下它没有被安装。

推荐安装 ARR 3.0 的方法是通过 WebPlatform,但这对我来说没有安装外部缓存。我不确定是否有效。

此外,不确定您是否遇到了控制器未找到异常或只是 404,但 .js 文件不应该通过 ASP.NET MVC。

经过所有这些步骤,并使用您的正则表达式,一切都按计划开始工作。

希望对您有所帮助。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接