IIS URL Rewrite:路径转端口及CI服务HTTPS反向代理配置问询
我刚帮公司完成了类似的配置,用IIS做反向代理把多个CI/CD服务从HTTP转成HTTPS路径映射,完全可行,给你一步步讲怎么实现:
整体方案概述
我们要利用IIS的URL Rewrite和**Application Request Routing (ARR)**模块,完成三件核心事:
- 把所有HTTP请求强制跳转至HTTPS
- 将不同的URL路径映射到后端对应服务的端口/路径
- 确保每个服务能识别新的HTTPS Base URL,避免内部链接出错
前置准备
先把基础环境搭好:
- 确保IIS已经安装了URL Rewrite 2.0和ARR 3.0模块(可以通过IIS管理器的「管理」菜单里的「Web平台安装程序」搜索安装)
- 申请并绑定SSL证书到IIS的目标站点(域名
server.company.com,端口443) - 启用ARR反向代理:打开IIS管理器 → 点击服务器节点 → 找到Application Request Routing → 点击「Server Proxy Settings」 → 勾选「Enable proxy」 → 保存
- 确认后端的TeamCity、YouTrack、Octopus服务能被IIS服务器访问(本地部署的话用
localhost+端口即可)
具体配置步骤
1. 强制HTTP转HTTPS(优先级最高)
先加一个跳转规则,确保所有用户访问HTTP时自动转到HTTPS:
- 打开IIS站点 → 点击URL Rewrite → 右侧「Add Rule(s)」 → 选择「Blank Rule」
- 规则名称:
Redirect-HTTP-to-HTTPS - 匹配URL:
- 模式:
(.*) - 使用:正则表达式
- 模式:
- 条件:
- 添加条件 → 输入
{HTTPS}→ 匹配类型「Matches the Pattern」 → 模式off
- 添加条件 → 输入
- 动作:
- 动作类型:
Redirect - 重定向URL:
https://{HTTP_HOST}/{R:1} - 重定向类型:
301 Permanent(永久跳转,利于缓存和用户体验) - 勾选「Append query string」
- 动作类型:
- 点击「Apply」保存
2. TeamCity 映射(HTTPS根路径 → HTTP 80端口)
因为TeamCity原本就用根域名,我们把HTTPS的根路径转发到后端的HTTP服务:
- 新增空白规则,名称:
Rewrite-TeamCity - 匹配URL:
- 模式:
(.*) - 使用:正则表达式
- 模式:
- 条件:
- 添加条件 →
{REQUEST_URI}→ 匹配类型「Does Not Match the Pattern」 → 模式^/(youtrack|octopus)(排除YouTrack和Octopus的路径,避免冲突)
- 添加条件 →
- 动作:
- 动作类型:
Rewrite - 重写URL:
http://localhost/{R:1}(如果后端服务不在本机,替换成服务器内网IP) - 勾选「Append query string」和「Stop processing of subsequent rules」(避免被后面的规则干扰)
- 动作类型:
- 保存规则
3. YouTrack 映射(HTTPS /youtrack → HTTP 1234端口)
把https://server.company.com/youtrack开头的请求转发到后端的YouTrack服务:
- 新增空白规则,名称:
Rewrite-YouTrack - 匹配URL:
- 模式:
^youtrack/(.*) - 使用:正则表达式
- 模式:
- 动作:
- 动作类型:
Rewrite - 重写URL:
http://localhost:1234/{R:1} - 勾选「Append query string」
- 动作类型:
- 保存后,必须修改YouTrack的Base URL:
打开YouTrack管理后台 → 找到「Settings」→「Global Settings」→「Base URL」,设置为https://server.company.com/youtrack,重启YouTrack生效
4. OctopusDeploy 映射(HTTPS /octopus → HTTP 5678/octopus)
对应原Octopus的路径,我们转发到后端的端口路径:
- 新增空白规则,名称:
Rewrite-Octopus - 匹配URL:
- 模式:
^octopus/(.*) - 使用:正则表达式
- 模式:
- 动作:
- 动作类型:
Rewrite - 重写URL:
http://localhost:5678/octopus/{R:1} - 勾选「Append query string」
- 动作类型:
- 保存后,修改Octopus的Base URL:
打开Octopus管理后台 →「Configuration」→「Nodes」→ 找到你的服务器 → 编辑「Server URI」为https://server.company.com/octopus,重启Octopus服务
验证与常见坑点
- 测试访问:
https://server.company.com→ 应该打开TeamCityhttps://server.company.com/youtrack→ 打开YouTrackhttps://server.company.com/octopus→ 打开OctopusDeploy
- 常见问题:
- 内部链接还是跳转到原端口/HTTP:检查服务的Base URL是否配置正确,这是最容易踩的坑
- 代理后服务无法访问:检查ARR的代理设置是否启用,IIS应用池账户是否有访问后端服务的权限(可以尝试给应用池账户加本地管理员权限测试,之后再缩小权限)
- 规则不生效:检查规则顺序,强制HTTPS的规则要排在最前面,TeamCity规则次之,然后是YouTrack和Octopus
内容的提问来源于stack exchange,提问作者Kira Resari




