我正在尝试通过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似乎是从我的服务器提供的。
之前有没有人做过这类事情,如果是的话,我错过了哪一步?
答案 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
通过在提升的命令提示符窗口上运行命令net stop was和net stop wmsvc来停止IIS
安装网址重写(v2)
安装Web Farm Framework(v1)
安装ARR(v3)
- 醇>
安装外部缓存模块(v1)
确保你有外部缓存模块(截至目前为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基础。