在IIS中创建反向代理

时间:2015-04-28 09:28:14

标签: asp.net-mvc iis reverse-proxy

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

基本上我需要回复我的域名上的请求

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

实际上是从以下地址提供文件:

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

我的网址重写规则如下:

<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似乎是从我的服务器提供的。

之前有没有人做过这类事情,如果是的话,我错过了哪一步?

2 个答案:

答案 0 :(得分: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&gt; 200 OK

请注意网址中的最新,如果您不包含该网址,则会导致重写错误:

https://third-party.com/ + dyn_wdp.js&gt;找不到404

我在网站上只有一条规则,如果你在虚拟目录中执行此操作,那么它将无法正常工作。

另外,根据本安装指南: https://blogs.iis.net/erez/new-features-in-arr-application-request-routing-3-0

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

  2.   
  3. 安装网址重写(v2)

  4.   
  5. 安装Web Farm Framework(v1)

  6.   
  7. 安装ARR(v3)

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

  10.   

确保你有外部缓存模块(截至目前为v1.1),因为它没有安装在我的情况下。

安装ARR 3.0的推荐方法是通过WebPlatform,但是没有为我安装外部缓存。我必须自己做,不确定这是否有效。

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

完成所有这些后,使用你的Regex一切都按计划开始工作。

HTH

答案 1 :(得分:0)

我强烈建议在IIS上使用Nodejs。 NodeJs正在插入令人敬畏的反向代理。 https://www.npmjs.com/package/awesome-reverse-proxy 一旦你设置网络比20行JS代码做其余的宽度nginx基础。