利用IIS UrlRewrite和ARR实现反向代理

IIS UrlRewrite是用来做请求重定向IIS Extension.(https://www.cnblogs.com/Code-life/p/13210399.html). 但是它只是做一个重定向,后续的处理依然由Web Server针对新的Url进行处理。其在IIS中的执行流程如下:

利用IIS UrlRewrite和ARR实现反向代理

因此,它只能将Url Rewrite到当前应用下的其他Url。但是如果我想在某些情况下将某些Url rewrite到其他应用,只考Url Rewrite就无能为力了。必须结合IIS 的另一个Extension, ARR(Application Request Routing).

ARR可以用来实现前向代理,反向代理,负载均衡等等功能,反向代理只是其很小的一个功能。我们需要做的很简单,安装后Enable就可以了。

利用IIS UrlRewrite和ARR实现反向代理

剩下的工作就是在Url Rewrite模块中创建一个Inbound Rule:

<rule name="LocalProxyInbound" enabled="true" stopProcessing="true">
      <match url="(proxy)(/testSite)(/.*)" /> <!--匹配所有proxy/testSite开头的请求-->
      <conditions>
      </conditions>
      <action type="Rewrite" url="http://localhost:8080{R:3}" logRewrittenUrl="true" /> <!--将匹配请求转发到localhost:8080另一个网站-->
 </rule>

 

然后我们创建一个网站(localhost:8080),里面有一个页面index.html,输出字符串"This is from test site".

利用IIS UrlRewrite和ARR实现反向代理 然后浏览器中访问:localhost/proxy/testSite/index.html

我们访问的地址是localhost/proxy/testSite/index.html, 通过URL Rewrite和ARR后将请求转发给了localhost:8080获取到index.html页面后返回给了浏览器。而在浏览器中看不到任何相关痕迹。这便实现了反向代理。

利用IIS UrlRewrite和ARR实现反向代理

上一篇:NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享


下一篇:webhook