如何在IIS中实现Apache mod_proxy的反向代理请求转发功能
IIS实现反向代理(复刻Apache mod_proxy功能)配置指南
IIS完全可以实现和Apache mod_proxy一致的反向代理转发能力,你之前配置仅能重写本地URL,是因为缺少核心代理组件以及对应的功能开启步骤,正确配置流程如下:
前置准备:安装必需组件
需要先安装2个IIS官方扩展,安装完成后重启IIS管理器生效:
- 「URL 重写模块」(URL Rewrite):用于匹配请求规则
- 「应用程序请求路由」(Application Request Routing,简称ARR):实现跨服务的请求转发能力
两个组件均可从微软官方IIS扩展库获取。
配置步骤
1. 开启ARR代理功能
打开IIS管理器,点击服务器根节点,找到「应用程序请求路由缓存」功能:
- 双击进入后点击右侧操作栏的「服务器代理设置」
- 勾选「启用代理」选项,其余默认配置保持不变,点击右上角「应用」保存设置
2. 配置站点反向代理规则
你已完成的站点绑定配置无需调整,只需修改站点根目录下的web.config为如下内容,即可实现所有发往mydomain.com的请求转发到http://localhost:8080:
<configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxy_To_Local8080" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^mydomain.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8080/{R:1}" /> <!-- 配置等价于Apache的ProxyPreserveHost On,同时处理压缩内容兼容问题 --> <serverVariables> <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules> <!-- 出站规则等价于Apache的ProxyPassReverse,修正后端返回的重定向地址 --> <outboundRules> <rule name="ReverseProxy_Outbound_RewriteRedirects" preCondition="IsRedirection" enabled="true"> <match filterByTags="A, Form, Img" pattern="^http://localhost:8080/(.*)" /> <action type="Rewrite" value="http://mydomain.com/{R:1}" /> </rule> <preConditions> <preCondition name="IsRedirection"> <add input="{RESPONSE_STATUS}" pattern="3[0-9][0-9]" /> </preCondition> </preConditions> </outboundRules> </rewrite> </system.webServer> </configuration>
验证配置
保存配置后重启对应IIS站点,访问mydomain.com下的任意路径即可正常转发到localhost:8080的对应服务,和你之前的Apache配置效果完全一致。
内容的提问来源于stack exchange,提问作者Roberto Petrilli
相关产品推荐
相关产品推荐

