【问题标题】:Creating a reverse proxy in IIS在 IIS 中创建反向代理
【发布时间】:2015-04-28 09:28:13
【问题描述】:

我正在尝试通过 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 看起来是从我的服务器提供的。

以前有没有人做过这种事情,如果有,我错过了哪一步?

【问题讨论】:

  • 那么这个第三方域完全位于您的网络之外?
  • 是的,没错。它是一个完全独立的网络。
  • 我不确定您是否可以以这种方式使用 ARR。我想重写规则将https://third.party.com/... URL 传递给您的 IIS 服务器,这实际上给出了 404,因为它不负责为该域提供服务。
  • 我和你正在研究同样的事情。同样的场景。您的正则表达式使一切对我有用。在此之前它不匹配规则,即使规则测试人员说它有效。
  • 请问dyn_wdp.js的目的是什么?

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


【解决方案1】:

不确定它是否会改变任何东西,但这是我成功使用的规则。

<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 正常

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

https://third-party.com/ + dyn_wdp.js > 404 未找到

我在网站上只有一个规则,如果你在虚拟目录中这样做,那么它就不能正常工作。

另外,根据本安装指南: 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。

在所有这些之后,使用您的正则表达式,一切都开始按计划进行。

HTH

【讨论】:

    【解决方案2】:

    我强烈建议在 IIS 上使用 Nodejs。有重新插入很棒的反向代理的 NodeJs。 https://www.npmjs.com/package/awesome-reverse-proxy 一旦你设置了网络,20 行以上的 JS 代码就完成了其余宽度的 nginx 基础。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2018-02-22
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多