如何针对不同端口配置IIS反向代理规则?
在IIS中基于端口配置反向代理规则的方法
当然可以实现!你遇到的困惑是因为没用到URL Rewrite里的服务器变量条件——其实IIS的URL重写规则支持通过服务器变量来匹配请求的端口,完全能满足你的需求。下面一步步给你讲怎么配置:
前提准备
首先确保你的IIS已经安装了两个必要组件:
- URL Rewrite模块:用来创建规则和匹配条件
- Application Request Routing (ARR):开启反向代理功能(如果没有这个组件,你会看不到反向代理的规则选项)
具体配置步骤
- 打开IIS管理器,定位到你要配置的站点,进入「URL重写」功能
- 点击右侧「添加规则」,选择「空白规则」(手动配置更灵活)
配置端口80的反向代理规则
- 规则名称:起个好识别的名字,比如
Proxy_Port80 - 匹配URL:
- 匹配类型:
正则表达式 - 模式:
(.*)(匹配所有路径)
- 匹配类型:
- 条件:点击「添加」,设置:
- 输入:
{SERVER_PORT}(这个服务器变量会返回当前请求的端口号) - 匹配类型:
精确匹配 - 模式:
80
- 输入:
- 操作:
- 操作类型:
重写 - 重写URL:填写你要代理到的后端地址,比如
http://your-backend-80/{R:1}({R:1}会保留原请求的路径) - 勾选「停止处理后续规则」,避免和其他规则冲突
- 操作类型:
配置端口8080的反向代理规则
重复上述步骤,只需要修改两处:
- 规则名称改成
Proxy_Port8080 - 条件的模式改成
8080 - 重写URL改成对应的后端地址,比如
http://your-backend-8080/{R:1}
直接修改web.config的示例
如果你习惯手动编辑配置文件,也可以直接在站点的web.config里添加以下代码:
<configuration> <system.webServer> <rewrite> <rules> <!-- 端口80的反向代理规则 --> <rule name="Proxy_Port80" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{SERVER_PORT}" pattern="^80$" /> </conditions> <action type="Rewrite" url="http://your-backend-80/{R:1}" /> </rule> <!-- 端口8080的反向代理规则 --> <rule name="Proxy_Port8080" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{SERVER_PORT}" pattern="^8080$" /> </conditions> <action type="Rewrite" url="http://your-backend-8080/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
额外注意事项
- 确保你的站点已经在IIS中绑定了80和8080两个端口:在站点的「绑定」设置里添加对应的HTTP绑定
- 如果是HTTPS请求,对应的端口(比如443)也可以用同样的方法匹配,只需要把条件里的端口号改成对应的数值即可
- 记得开启ARR的代理功能:在IIS管理器的服务器级别,找到「Application Request Routing Cache」,点击「服务器代理设置」,勾选「启用代理」
内容的提问来源于stack exchange,提问作者Dave Stott
相关产品推荐
相关产品推荐

