Skip to content

路由、负载均衡与重定向 ​

访问服务可以将不同路径交给不同后端,也可为同一路由配置多个目标,或直接向客户端返回重定向。本文介绍如何选择动作、填写路由并验收;创建服务的基础字段见创建与修改服务。

操作前准备 ​

  • 具有访问服务管理权限,已确定要新建或修改的域名与入口端口。
  • 每个转发后端均已运行,并能从 HiHTTPS 网络访问;确认后端能处理实际转发的路径。
  • HTTPS 服务已准备覆盖业务域名的证书与私钥,入口网络可达;证书配置见服务 HTTPS、TLS 与 TLCP。
  • 改动已有业务前记录路由及目标,确认维护窗口;重定向前先验证目标网站可用,尤其检查 TLS 和循环跳转。

以下示例中 192.168.8.10 是 HiHTTPS,192.168.8.223、192.168.8.224 是后端。请替换成实际域名和地址;内网 IP 仅供能够路由到它的客户端使用。

配置路径与动作 ​

  1. 进入 访问服务 -> 访问服务,新建或编辑目标服务,切换到 路由规则。
  2. 保留根路径 / 作为兜底。根规则固定在最后,不能删除或修改路径,但可以修改动作和目标。
  3. 需要单独处理路径时,点击 添加路径规则(Location),填写如 /api/ 的路径。新增规则显示在根规则上方,不要把显示顺序简单当作全部规则的匹配优先级。
  4. 选择动作,并填写对应目标,检查后保存。保存报错时先修正具体问题,不将表单已提交当作配置已生效。
字段或动作如何使用边界
路径如 /api/,根路径 / 兜底;自定义路径规则支持动态路径变量(自 V1.3 起),可用变量以界面提示为准路径前缀不会自动从转发请求中删除;动态变量仅用于路径匹配,不适用于重定向目标
转发填完整后端 URL,如 http://192.168.8.223:9000使用后端真实协议,与客户端入口协议独立
添加目标地址为同一路由配置多台后端每条转发路由最多 20 个目标,不是整个服务最多 20 条路由
权重1–100 的整数,默认 1相对权重,不要求合计 100;还需应用正确处理会话与数据
重定向填其他域名的完整 HTTP(S) URL返回客户端跳转响应,不代为访问目标;静态地址不自动保留原路径参数

访问服务路由规则中的根路径、动作类型、转发目标及权重

Nginx 编辑器为滚动区域,图中仅展示部分内容。

原始 Nginx 配置的同步边界 ​

原始 Nginx 配置 展示表单生成的路由片段,不是完整配置文件编辑器。编辑后移出输入框,只有能解析回表单、且重新生成后与输入完全一致的配置才会同步。

界面提示“已脱离表单”时,草稿不会随表单保存;点击 恢复表单生成 会放弃草稿。不要将“文本框里还看得到内容”当作已经应用,也不要假定任意指令都能与表单无损转换。独立的高级配置入口与维护要求见高级:自定义配置。

示例:同域名按路径分流 ​

场景:通过 https://portal.example.com 访问网站,将 /api/ 下的请求转发到另一项 API 服务。

  1. 在 详细内容 填写 portal.example.com,入口选择 HTTPS / 443。
  2. 在 证书配置 选择覆盖该域名的可用证书。
  3. 在 路由规则 添加 /api/,并保留根路径 /:
路径动作类型转发目标用途
/api/转发http://192.168.8.223:9000API 服务
/转发http://192.168.8.223:8080网站页面及其他请求

本例目标只填协议、主机和端口,不附加路径,也不设置重写,因此请求路径会保留:

  • https://portal.example.com/index.html → http://192.168.8.223:8080/index.html
  • https://portal.example.com/api/users → http://192.168.8.223:9000/api/users

保存后,分别验证后端真实存在的网站页面和 API:

bash
curl -i --resolve portal.example.com:443:192.168.8.10 https://portal.example.com/index.html
curl -i --resolve portal.example.com:443:192.168.8.10 https://portal.example.com/api/users

路径规则不会自动去掉前缀

API 后端必须能处理 /api/users,不会自动改为 /users。若后端没有 /api/ 前缀,需要另行确认适用的路径重写方案,或改用独立域名。填写 /api/ 时保留末尾 /,验证地址也须包含此前缀。

示例:多目标加权转发 ​

场景:同一个应用运行在两台后端上,希望通过 https://app.example.com 分担请求,其中一台承担较多流量。

  1. 分别确认两台后端能处理相同域名、路径和业务请求。会话状态应由应用妥善共享,不能假定加权转发会自动保持登录会话。
  2. 新建或编辑访问服务,入口使用 HTTPS / 443,关联覆盖域名的有效证书。
  3. 找到根路径 /,动作选择 转发,添加目标:
转发目标权重含义
http://192.168.8.223:80803相对承担较多请求
http://192.168.8.224:80801相对承担较少请求
  1. 保存并确认没有配置错误,从客户端访问业务:
bash
curl -i --resolve app.example.com:443:192.168.8.10 https://app.example.com/
  1. 对照两台后端的应用日志,或用应用提供的实例标识区分处理节点。

权重表示相对比例,不要求合计为 100。本例长期分配趋势约为 3:1,不是保证每四次请求严格分成三次和一次;少量请求、连接复用或后端异常都可能影响观察结果。

完成检查:每个后端均有正常响应,请求到达预期节点;登录、写入等关键操作不会因切换节点失效。修改后端或权重后重新检查,不把“保存成功”当作所有节点健康的证明。

示例:跳转到其他域名 ​

场景:将旧入口 http://old.example.com 统一跳转到新网站 https://www.example.com/start,不再代理旧应用。

  1. 确认新网站可用、HTTPS 校验正常;HiHTTPS 不会自动创建跳转目标网站。
  2. 新建访问服务,域名填写 old.example.com,入口选择 HTTP / 80。
  3. 将根路径 / 的动作改为 重定向,填写静态 URL https://www.example.com/start 并保存。
  4. 从客户端检查第一次响应,不添加 -L:
bash
curl -i --resolve old.example.com:80:192.168.8.10 'http://old.example.com/legacy?from=test'

新建表单默认返回 301,响应头 Location 应为 https://www.example.com/start。当前表单没有独立状态码选择框,不为切换状态码随意修改原始配置。最后用浏览器访问旧地址,确认最终页面可达且没有循环。

跳转地址限制

不允许把本服务域名作为重定向目标,即使协议或端口不同也不行。同域名的 HTTP 到 HTTPS 跳转不使用本节的静态重定向,请在 证书配置 -> 高级设置 -> SSL 选项 中开启 强制 HTTPS,见服务 HTTPS 配置。

重定向目标使用静态地址,不支持 $host、$request_uri 等变量,也不会自动追加原路径或查询参数。本例的 /legacy?from=test 不会带到新地址。需要逐路径对应的迁移,应先确认当前版本支持的方案,不能用固定跳转代替。

完成检查 ​

  • 根路径与新增路径分别访问,确认请求到达正确后端,实际路径符合后端预期。
  • 多后端均可用,关键业务和共享会话正常;不要求少量请求严格体现权重比例。
  • 重定向的首次状态与 Location 正确,最终站点可达且无循环,路径参数是否保留符合静态跳转限制。
  • HTTPS 校验、访问控制和未修改的其他路径仍正常;没有未保存的原始配置草稿被误认为已生效。

常见问题与下一步 ​

  • API 返回 404:核对后端是否接受保留的路径前缀,先检查实际请求,不直接删掉根规则。
  • 某个后端一直无请求:检查目标是否可达、权重和真实日志,避免只凭几次访问判断比例。
  • 重定向目标被拒绝:检查是否使用本服务域名、相对 URL 或 $ 变量,按固定跨域名 URL 的限制处理。
  • 原始配置未生效:查看是否“已脱离表单”,确认草稿是否被接受,不改系统生成文件绕过。
  • 返回 502 或超时:结合业务日志和常见问题检查入口与后端。