反向代理 – 虚拟目录/子文件夹是否符合重写规则

我试图创build一个反向代理,将重写所有请求到一个特定的URL到DMZ内的另一台服务器。 基于这篇文章,我得到了设置和configuration工作https://learn.iis.net/page.aspx/659/reverse-proxy-with-url-rewrite-v2-and-application-request-routing

所以我的基本设置是这样的 –

应该触发重写的基本URL – http://MySite/Custom?Data=123

代理URL – http://MyProxyServer/Service?Data=123

我的问题是与上面的两个BOLD关键字! 我似乎无法成功地重写所有的请求到新的URL。

详细解释 –

当我使用以下规则 –

 <rule name="ReverseProxy" stopProcessing="true"> <match url="Custom/(.*)" /> <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" /> </rule> 

我得到一个404错误,说: http://MySite/Service没有find!

跟踪使用失败的请求日志,我可以看到规则工作完美(新url创build正确),但最终请求以404错误结束。

事情是,如果我稍微调整规则,一切工作正常。

遵循规则的作品 –

 <rule name="ReverseProxy" stopProcessing="true"> <match url="Service/(.*)" /> <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" /> </rule> 

但我必须改变我的基地址为http://MySite/Service?Data=123 from http://MySite/Custom?Data=123

那么在IIS 7中,反向代理实现是否存在限制,我们必须在源代理和代理之间匹配子目录/虚拟目录名称,还是我的规则不足?

ARR /重写有一个未公开的问题,它不能映射子文件夹。 我将其添加为我的参考,并希望它可以帮助别人

我已经尝试了一种解决方法,似乎是有效的,是在源web应用程序内创build一个文件夹,在指向目标web应用程序的规则中添加一个web.config文件夹:

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://<<<TARGET_HOSTNAME>>>{R:1}" /> <serverVariables> <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules> <outboundRules> <rule name="RestoreAcceptEncoding" preCondition="RestoreAcceptEncoding"> <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)$" /> <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" /> </rule> <preConditions> <preCondition name="RestoreAcceptEncoding"> <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*" /> </preCondition> </preConditions> </outboundRules> </rewrite> </system.webServer> </configuration> 

还添加了https://blogs.msdn.microsoft.com/friis/2016/08/25/iis-with-url-rewrite-as-a-reverse-proxy-part-2-dealing-with-500- 52个状态码/围绕GZIP