跳到主要内容
版本:V6-latest

HTTP

概述

HTTP 路由用于将外部请求转发到应用组件,支持域名绑定、负载均衡、HTTPS、WebSocket 等功能。

前提条件

  • 已完成 Rainbond 安装并创建应用
  • 应用中至少有一个运行中的组件

快速开始

场景一:使用默认域名

  1. 开启对外端口:进入组件详情页面,在端口选项中,开启需要对外暴露的端口。
  2. 访问验证:使用默认域名 xxx.nip.io 访问您的应用。
提示

无需配置域名解析,快速体验应用访问能力。如无法访问,请阅读应用无法访问故障排查指南

场景二:自定义域名

最简单的路由配置只需 3 步:

  1. 进入网关管理 → 点击"新增路由"
  2. 填写域名 → 如 demo.example.com(需将域名解析到网关 IP)
  3. 选择组件 → 选择要绑定的应用组件和端口
提示
  • 域名需要先解析到网关 IP 才能访问
  • 本文档分为基础配置和高级配置,按需查看

新增 HTTP 路由

第一步:进入网关管理

  1. 进入应用视图
  2. 点击左侧菜单 网关管理
  3. 点击 新增路由 按钮

第二步:基础配置

1. 域名

填写域名(如 demo.example.com),页面会提示需要将域名解析到的 IP 地址。

📖 域名配置详细说明

支持的域名类型

  • 自定义域名:demo.example.com
  • 通配符域名:*.example.com
  • 系统默认域名(无需配置 DNS)

域名解析步骤

  1. 登录域名服务商控制台
  2. 添加 A 记录,指向网关 IP(页面会提示具体 IP)
  3. 等待 DNS 生效(5-10 分钟)

2. 路径

配置访问路径,默认 /* 表示匹配所有路径。

📖 路径配置详细说明
路径格式说明
/*匹配所有路径(默认)
/api/*只匹配 /api/ 开头的请求
/app/user/*匹配多级路径

3. 服务来源

选择要绑定的应用组件和端口。

基础配置

  • 应用名称 → 组件名称 → 端口号
  • 权重:多组件时按权重分配流量(默认 100)
📖 负载均衡配置

当需要将流量分配到多个组件时:

  1. 配置第一个组件,设置权重(如 80)
  2. 点击 + 添加第二个组件,设置权重(如 20)
  3. 流量将按权重比例分配(80:20)

示例:实现灰度发布

  • web-v1:权重 90(90% 流量)
  • web-v2:权重 10(10% 流量)

4. 高级配置(可选)

点击页面上的 更多 按钮可展开以下高级配置选项。

何时使用高级配置
  • ✅ 需要限制特定 HTTP 方法(如只允许 GET、POST)
  • ✅ 需要限制访问 IP(如仅允许办公网访问)
  • ✅ 需要基于 Header/Cookie 进行流量路由
  • ✅ 需要配置超时时间
  • ❌ 简单的域名绑定不需要高级配置
路径配置(高级)
  • 支持添加多个路径规则,点击 + 按钮可添加更多
  • 点击 取消 可折叠高级配置面板
  • 每个路径规则独立生效
HTTP 方法过滤

选择允许通过的 HTTP 方法,支持多选:

方法说明
GET获取资源
POST提交数据
PUT更新资源
DELETE删除资源
OPTIONS预检请求
HEAD获取响应头
PATCH部分更新
TRACE追踪请求

配置说明

  • 默认允许所有 HTTP 方法
  • 点击方法名称可选中/取消选中
  • 已选中的方法会显示 × 标记,点击可取消
  • 未选中的方法请求会被拒绝(返回 405 Method Not Allowed)
来源 IP 白名单

限制只有特定 IP 或 IP 段才能访问该路由。

配置说明

  • 输入允许访问的 IP 地址或 CIDR 格式的 IP 段
  • 点击 + 按钮可添加多个 IP/IP 段
  • 留空表示不限制来源 IP

IP 格式示例

  • 单个 IP:192.168.1.100
  • IP 段(CIDR):192.168.1.0/24
  • 多个 IP:通过添加多条规则实现
高级条件匹配

基于请求特征进行精细化路由控制,支持以下类型:

匹配类型

类型说明示例
Header根据请求头匹配X-Version: v2
Cookie根据 Cookie 匹配user_type: vip
Query根据 URL 参数匹配debug: true

比较运算符

运算符说明示例
等于完全匹配name == "admin"
不等于不匹配env != "prod"
包含字符串包含user-agent 包含 "Mobile"
正则匹配正则表达式path 匹配 "^/api/.*"

配置步骤

  1. 选择匹配类型(Header/Cookie/Query)
  2. 输入名称(name)
  3. 选择比较运算符
  4. 输入匹配值(value)
  5. 点击 + 添加更多条件

使用场景

场景 1:灰度发布

通过 Header 或 Cookie 将特定用户导流到新版本:

类型: Header
名称: X-Version
运算符: 等于
: beta
场景 2:移动端/PC 端分流

根据 User-Agent 区分设备类型:

类型: Header
名称: User-Agent
运算符: 包含
: Mobile

将移动端请求路由到移动端优化的组件。

场景 3:A/B 测试

根据 Cookie 值进行 A/B 测试:

类型: Cookie
名称: ab_test
运算符: 等于
: group_a
超时设置

配置与后端服务通信的超时时间,包含三个参数(单位:秒):

参数说明默认值建议值
连接超时建立连接的最长等待时间60s5-60s
读超时读取响应数据的最长等待时间60s60-300s
发送超时发送请求数据的最长等待时间60s60-180s

配置建议

  • API 接口:连接 5s,读 60s,发送 60s
  • 文件上传:连接 10s,读 300s,发送 300s
  • 长轮询:连接 10s,读 600s,发送 60s
  • WebSocket:使用较长的超时时间
注意事项
  • 超时时间过短可能导致正常请求被中断
  • 超时时间过长可能占用连接资源
  • 根据实际业务场景合理设置

5. WebSocket(可选)

如果应用需要 WebSocket 支持(实时聊天、数据推送等),开启 websocket 开关。

第三步:提交配置

检查配置无误后,点击 确定 按钮完成创建。

路由管理操作

访问验证

创建路由后,在浏览器访问配置的域名:

http://demo.example.com/

或使用 curl 测试:

curl http://demo.example.com/

编辑路由

在网关管理列表中,点击路由的 编辑 按钮修改配置。

删除路由

点击 删除 按钮可删除路由。删除后该域名将无法访问。

网关插件配置

网关提供丰富的插件功能,实现流量管理、安全防护和性能优化。

插件使用说明:

  • 在创建/编辑路由时,点击 添加插件 按钮
  • 选择需要的插件并配置参数
  • 一个路由可以添加多个插件
  • 插件按添加顺序执行
limit-count

基于固定时间窗口的请求计数限流,可以限制指定时间内的请求数量。

配置参数

参数名称必填类型说明示例值
count数字时间窗口内允许的请求数量100
time_window数字时间窗口大小(秒)60
key_type下拉选择限流粒度类型var(变量)
key字符串限流键,根据此值区分不同的限流对象remote_addr(客户端IP)
rejected_code数字超过限流后返回的 HTTP 状态码503
rejected_msg字符串超过限流后返回的错误消息"请求过于频繁,请稍后再试"
policy下拉选择限流策略local(本地限流)
show_limit_quota_header开关是否在响应头中显示限流配额信息开启/关闭

key_type 可选值

  • var:使用 Nginx 变量,如 remote_addr(客户端IP)、http_x_forwarded_for(代理IP)
  • constant:使用常量值,对所有请求统一限流

policy 可选值

  • local:本地限流,仅在当前网关节点生效
  • redis:分布式限流,需要配置 Redis(适用于多网关节点场景)
limit-conn

限制同一时刻的并发连接数,防止服务器过载。

配置参数

参数名称必填类型说明示例值
conn数字允许的最大并发连接数10
burst数字允许的突发连接数(超出 conn 但可以排队的数量)5
default_conn_delay数字默认的连接延迟时间(秒)1
only_use_default_delay开关是否只使用默认延迟关闭
key_type下拉选择限流粒度类型var
key字符串限流键remote_addr
rejected_code数字超过限制后返回的 HTTP 状态码503
rejected_msg字符串超过限制后返回的错误消息"连接数过多"
allow_degradation开关是否允许降级(当限流失败时放行请求)关闭

key_type 可选值

  • var:使用 Nginx 变量,如 remote_addr(客户端IP)、http_x_forwarded_for(代理IP)
  • constant:使用常量值,对所有连接统一限制
proxy-rewrite

在将请求转发到后端服务前,重写请求的 URI、请求方法、请求头等信息。

配置参数

参数名称必填类型说明示例值
uri字符串重写后的 URI/new/path
method下拉选择重写后的请求方法GET/POST/PUT/DELETE
regex_uri字符串数组使用正则表达式重写 URI["^/api/v1/(.*)", "/$1"]
host字符串重写后的 Host 头backend.example.com
headers.add键值对添加请求头X-Custom-Header: value
headers.set键值对设置(覆盖)请求头X-Real-IP: $remote_addr
headers.remove字符串数组删除请求头["X-Forwarded-For"]
use_real_request_uri_unsafe开关使用原始请求 URI(不安全)关闭

method 可选值

  • GET
  • POST
  • PUT
  • DELETE
  • PATCH
  • HEAD
  • OPTIONS
  • TRACE
cors

配置 CORS(Cross-Origin Resource Sharing)策略,允许跨域请求访问。

配置参数

参数名称必填类型说明示例值
allow_origins字符串允许的源(Origin),* 表示允许所有* 或 https://example.com
allow_methods字符串允许的 HTTP 方法* 或 GET,POST,PUT
allow_headers字符串允许的请求头* 或 Content-Type,Authorization
expose_headers字符串暴露给客户端的响应头X-Custom-Header
max_age数字预检请求的缓存时间(秒)5
allow_credentials开关是否允许发送凭证(Cookie)关闭
allow_origins_by_regex字符串数组使用正则表达式匹配允许的源["https://.*\.example\.com"]
allow_origins_by_metadata字符串数组基于元数据匹配允许的源-
real-ip

从代理服务器的请求头中提取客户端的真实 IP 地址,适用于应用部署在 CDN、负载均衡器或多层代理后的场景。

配置参数

参数名称必填类型说明示例值
source字符串IP 来源字段名arg_realip 或 http_x_forwarded_for
trusted_addresses字符串数组受信任的代理服务器地址列表(CIDR 格式)["10.0.0.0/8", "192.168.0.0/16"]
recursive开关是否递归查找真实 IP关闭

source 可选值

说明使用场景
arg_realip从 URL 参数中获取测试环境、特殊场景
http_x_forwarded_for从 X-Forwarded-For 请求头获取CDN、负载均衡器(最常用)
http_x_real_ip从 X-Real-IP 请求头获取Nginx 代理
http_cf_connecting_ip从 Cloudflare 特定请求头获取Cloudflare CDN
http_true_client_ip从 True-Client-IP 请求头获取Akamai CDN
其他自定义请求头从自定义请求头获取自定义代理架构
client-control

限制客户端请求体的大小,防止超大请求影响服务器性能。

配置参数

参数名称必填类型说明示例值
max_body_size数字最大请求体大小(MB),0 表示不限制10
redirect

将请求重定向到其他 URL,支持 HTTP 到 HTTPS 的自动重定向、固定 URL 重定向和正则表达式重定向。

配置参数

参数名称必填类型说明示例值
http_to_https开关是否将 HTTP 请求自动重定向到 HTTPS关闭
uri字符串重定向的目标 URIhttps://www.example.com
regex_uri字符串数组使用正则表达式匹配并重定向["^/old/(.*)", "/new/$1"]
ret_code数字重定向的 HTTP 状态码302
encode_uri开关是否对重定向 URI 进行 URL 编码关闭
append_query_string开关是否将原始查询字符串附加到重定向 URI关闭

ret_code 可选值

状态码名称说明使用场景
301Moved Permanently永久重定向,会被浏览器和搜索引擎缓存域名迁移、URL 永久变更
302Found临时重定向(默认值),不会被缓存临时跳转、测试环境
307Temporary Redirect临时重定向,保持请求方法不变POST 请求临时跳转
308Permanent Redirect永久重定向,保持请求方法不变POST 请求永久跳转

常见问题

Q: 配置完路由后无法访问?

A: 请检查以下几点:

  1. 域名是否正确解析到网关 IP
  2. 组件是否正常运行
  3. 组件端口是否开启对外服务
  4. 防火墙是否允许访问

Q: 如何查看当前网关 IP?

A: 可以通过以下方式查看:

  1. 在路由配置页面,系统会提示解析的 IP 地址
  2. 在平台管理 → 集群 → 集群信息中查看

Q: 支持同一个域名配置多个路径吗?

A: 支持。您可以为同一个域名配置不同的路径规则,将不同路径的请求转发到不同的组件。

例如:

  • example.com/api/* → API 服务组件
  • example.com/web/* → Web 前端组件

Q: WebSocket 连接超时怎么办?

A: WebSocket 超时通常是因为连接空闲时间过长。可以:

  1. 在应用中实现心跳机制
  2. 配置网关的空闲超时时间(默认 60 秒)

Q: 如何实现灰度发布?

A: 可以通过以下方式实现:

  1. 权重方式:新旧版本组件设置不同权重
  2. Cookie/Header 方式:基于特定条件路由到新版本
  3. 域名方式:使用不同域名访问不同版本

Q: 路由配置多久生效?

A: 路由配置通常在 5-10 秒内生效。如果超过这个时间仍未生效,请检查配置是否正确。

故障排查

请阅读应用无法访问故障排查指南