如何在IIS中重写/重定向请求至不同端口的Tomcat代理服务?
可行!通过IIS URL重写+ARR实现反向代理无需修改代码
完全可以通过IIS的URL重写模块结合Application Request Routing(ARR)来实现这个需求,不需要修改原Web应用的任何代码。下面是具体的实现步骤:
前提准备
首先确保你的IIS服务器上已经安装了两个核心组件:
- URL重写模块:IIS的核心重写工具,可通过IIS管理器的「Web平台安装程序」搜索安装。
- Application Request Routing (ARR):用于启用IIS的反向代理功能,同样通过Web平台安装程序安装。安装完成后,在IIS管理器的服务器级别找到「Application Request Routing Cache」,进入后点击「Server Proxy Settings」,勾选「Enable proxy」并保存。
配置URL重写规则
- 打开IIS管理器,定位到你的目标Web应用(对应
https://test.com:2345/testpage/的站点)。 - 在功能视图中找到并点击「URL重写」。
- 右侧操作栏点击「添加规则」,选择「反向代理规则」,点击确定。
- 在反向代理配置界面:
- 在「Enter the server name or IP address to which you want to redirect requests」输入框中填写
test.com:2346。 - 勾选「Enable SSL offloading」(如果你的Tomcat服务也使用HTTPS,这个选项可以确保IIS正确处理SSL连接)。
- 点击「OK」生成基础规则。
- 在「Enter the server name or IP address to which you want to redirect requests」输入框中填写
调整规则适配路径映射
因为原请求路径是/proxy/test.asmx,而新的Tomcat服务地址是/proxy/test,需要微调规则确保路径正确映射:
- 在URL重写规则列表中找到刚才创建的规则,点击「编辑」。
- 在「匹配URL」部分,设置「请求路径」为「Matches the Pattern」,使用「正则表达式」,模式填写
^proxy/(.*)\.asmx$。 - 在「操作」部分,设置「重写URL」为
https://test.com:2346/proxy/{R:1}。这里{R:1}会捕获正则表达式中第一个分组的内容(也就是test),从而把/proxy/test.asmx精准映射到/proxy/test。 - 保存规则。
直接修改web.config配置(可选)
如果你更习惯直接编辑配置文件,可以将以下代码添加到Web应用的web.config的<system.webServer>节点下:
<rewrite> <rules> <rule name="Proxy to Tomcat" stopProcessing="true"> <match url="^proxy/(.*)\.asmx$" /> <action type="Rewrite" url="https://test.com:2346/proxy/{R:1}" /> <serverVariables> <set name="HTTP_X_FORWARDED_FOR" value="{REMOTE_ADDR}" /> <set name="HTTP_X_FORWARDED_PROTO" value="https" /> </serverVariables> </rule> </rules> </rewrite>
这段配置会把所有匹配/proxy/*.asmx的请求转发到Tomcat的对应路径,同时传递必要的转发头信息,方便Tomcat识别真实请求来源。
验证配置
完成配置后,重启你的IIS站点,然后测试原Web应用的AJAX请求:前端发起的https://test.com:2345/proxy/test.asmx请求会被IIS静默转发到https://test.com:2346/proxy/test,前端完全感知不到后端服务的地址变化,也不需要修改任何代码。
内容的提问来源于stack exchange,提问作者Adhip Rebello




