如何在IIS中基于客户端IP转发请求至不同端口的.NET WebService
实现方案
完全可以通过IIS的URL重写和应用程序请求路由(ARR)模块实现这个需求,具体步骤如下:
1. 安装必要的IIS模块
- 打开服务器管理器,通过「添加角色和功能」向导,在「Web服务器(IIS)→角色服务」中勾选URL重写并完成安装。
- 安装应用程序请求路由(ARR):通过IIS的「Web平台安装器」搜索“Application Request Routing”进行安装,或直接从Windows服务器组件库获取。
2. 启用ARR代理功能
- 打开IIS管理器,点击左侧的服务器节点,在功能视图中找到应用程序请求路由。
- 右侧操作栏点击「服务器代理设置」,勾选启用代理选项,点击「应用」保存配置。
3. 配置基于客户端IP的重写规则
假设你的正式WebService部署在目标站点,测试服务部署在同一VM的8080端口(可替换为你的实际端口):
- 进入正式服务所在的站点,在功能视图中打开URL重写。
- 点击右侧「添加规则」,选择「空白规则」,按以下配置:
- 规则名称:自定义(比如“Forward to TestService for Approved IPs”)
- 匹配URL:
- 请求路径:「匹配模式」选择「正则表达式」,输入
.*(匹配所有请求路径)
- 请求路径:「匹配模式」选择「正则表达式」,输入
- 条件:
- 点击「添加」,设置:
- 条件输入:
{REMOTE_ADDR} - 检查输入字符串:「匹配输入字符串的模式」
- 模式:输入允许访问测试服务的客户端IP正则,比如单个IP写
^192\.168\.1\.100$,多个IP用^(192\.168\.1\.100|192\.168\.1\.101)$,IP段可按需编写正则
- 条件输入:
- 点击「添加」,设置:
- 操作:
- 操作类型:选择「重写」
- 重写URL:输入
http://localhost:8080{R:0}({R:0}会保留原请求的完整路径,确保API路由一致) - 勾选「停止处理后续规则」
4. 验证效果
- 使用指定IP的客户端发起API调用,查看测试服务的日志确认请求是否到达;
- 使用其他IP的客户端调用,确认请求仍路由到正式服务。
关于计算机名匹配的补充
如果需要基于客户端计算机名路由,可将条件输入改为{REMOTE_HOST},并编写对应计算机名的正则模式。但注意IIS需要启用反向DNS解析才能正确获取REMOTE_HOST,可靠性不如IP匹配,优先推荐使用IP规则。
内容的提问来源于stack exchange,提问作者gfree
相关产品推荐
相关产品推荐

