所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写
Posted
技术标签:
【中文标题】所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写【英文标题】:IIS Reverse proxy/Global URL Rewrite for "/api/" folder for all sites 【发布时间】:2020-08-23 08:47:17 【问题描述】:对于请求位于“/api/”文件夹中的任何站点,我想将任何请求反向代理到 IIS 实例。我设置了一个服务器场,并使用“*”通配符让反向代理为所有内容工作,但是当我想将范围限制为 RegEx 时,它不会重写/代理到后端服务器。我在 IIS 实例级别采取的步骤:
-
设置网络场 - 其中只有一台服务器 machine2
为“*”设置重写
针对“http://machine1/site1/api/api1”进行测试 - 已成功路由到 machine2/site1/api/api1
将入站规则从通配符更改为正则表达式
将模式更改为 '.(/./api/.*)'(不带单引号)
针对“http://sarjhennew10vm/site1/api/api1”进行测试
请求未路由到机器 2。
下面是我的 applicationHost.config [IIS 的根目录] 中的一个 sn-p。
<rewrite>
<globalRules>
<rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*(\/.*\/api\/.*)" />
<action type="Rewrite" url="http://Farm1/R:1" />
</rule>
</globalRules>
</rewrite>
<proxy enabled="true" />
是否可以为特定文件夹的实例上的任何站点将全局 URL 重写到服务器场?
编辑:下面已回答 - 我附上一张图片以防其他人遇到此问题。测试模式对我来说并不清楚 - 并且计数器文档 found here。
【问题讨论】:
【参考方案1】:你的模式不对,你可以试试下面的代码,把rewrite url改成https://Farm1/R: 0
<rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*(\/api\/.*)" />
<action type="Rewrite" url="https://Farm1/R:0" />
</rule>
【讨论】:
成功了。我正在查看“测试模式”结果,该结果由捕获组 0 和 1 爆发。我认为通过放置组 r:1(只是“site1/api/api1”)它会解析为farm1/site1/api/api1,但是不是这样。确实 r:0,在测试模式中解析为 'machine1/site1/api/api1') 解析为我想要的。我不清楚,但它有效 - 非常感谢!以上是关于所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写的主要内容,如果未能解决你的问题,请参考以下文章
使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点