外观
🚀 路由配置指南 
📖 简介 
路由配置是网关的核心功能,它决定了请求如何被转发到后端服务。本指南将帮助您了解如何在Go Gateway中配置和使用路由功能。
为什么需要路由配置?
- 实现请求转发和负载均衡
- 支持服务发现和动态路由
- 提供灵活的请求过滤和转换
- 实现API网关的核心功能
⚙️ 配置结构 
网关的配置主要包含以下几个部分:
yaml
# 网关路由配置
gateway:
  routes:  # 路由配置列表
    - id: route-1
      uri: lb://service-1
      predicates:
        - Path=/api/**
      filters:
        - StripPrefix=1📋 配置参数说明 
基本配置项 
| 配置项 | 类型 | 必填 | 说明 | 示例值 | 
|---|---|---|---|---|
| id | string | 是 | 路由的唯一标识符 | api-service | 
| uri | string | 是 | 路由的目标URI,支持lb://前缀用于负载均衡 | lb://api-service | 
| predicates | array | 是 | 路由的断言条件列表 | - Path=/api/** | 
| filters | array | 否 | 路由的过滤器列表 | - StripPrefix=1 | 
断言配置 
断言说明
断言用于判断请求是否匹配当前路由,支持多种匹配方式。每个断言都有特定的格式要求和使用场景。
| 断言类型 | 说明 | 格式 | 示例 | 
|---|---|---|---|
| Path | 路径匹配,支持通配符 * 和 **,多个路径用逗号分隔 | Path=path1,path2,... | Path=/api/**,/rest/** | 
| Method | HTTP方法匹配,多个方法用逗号分隔 | Method=GET,POST,... | Method=GET,POST,PUT | 
| Header | 请求头匹配,支持正则表达式 | Header=name,regexp | Header=X-Id,\d+ | 
| Query | 查询参数匹配,可指定参数值 | Query=param[,value] | Query=name,test | 
| Host | 主机名匹配,支持通配符 *,多个主机用逗号分隔 | Host=host1,host2,... | Host=*.example.com,*.test.com | 
| After | 在指定时间之后生效 | After=datetime | After=2025-04-27T23:30:45+08:00 | 
| Before | 在指定时间之前生效 | Before=datetime | Before=2025-04-01T23:30:45+08:00 | 
| Between | 在指定时间范围内生效 | Between=time1,time2 | Between=2025-04-01T23:30:45+08:00,2025-04-27T23:30:45+08:00 | 
| Cookie | Cookie匹配,支持正则表达式 | Cookie=name,regexp | Cookie=sessionId,\w+ | 
| XForwardedRemoteAddr | 远程地址匹配,支持IP地址、CIDR网段和通配符 | XForwardedRemoteAddr=ip1,ip2,... | XForwardedRemoteAddr=192.168.1.0/24,10.0.0.* | 
使用说明:
- Path断言是最常用的断言类型,必须配置。/* 匹配单层路径,/** 匹配多层路径。可以配置多个路径,用逗号分隔
- Method断言用于限制请求方法,多个方法间用逗号分隔,不区分大小写
- Header和Cookie断言支持正则表达式匹配,格式为"名称,正则表达式"
- Query断言可以只匹配参数名,也可以同时匹配参数值
- Host断言支持通配符,*.example.com匹配二级域名,**.example.com匹配多级域名。可以配置多个主机名,用逗号分隔
- 时间相关断言使用ISO-8601格式,需要包含时区信息
- XForwardedRemoteAddr断言用于根据客户端IP地址进行路由匹配,支持多种格式: - 精确IP地址:192.168.1.100
- CIDR网段:192.168.1.0/24匹配整个网段
- 通配符:192.168.1.*匹配IP段
- 多个地址:用逗号分隔,如 192.168.1.0/24,10.0.0.*,172.16.1.100
 
- 精确IP地址:
- 多个断言之间是"与"的关系,全部满足才会匹配成功
过滤器配置 
过滤器说明
过滤器用于对请求和响应进行修改,支持多种转换操作。
| 类型 | 说明 | 格式 | 示例 | 
|---|---|---|---|
| StripPrefix | 去除路径前缀 | StripPrefix=n | StripPrefix=1 | 
| PrefixPath | 添加路径前缀 | PrefixPath=prefix | PrefixPath=/api | 
| AddRequestHeader | 添加请求头 | AddRequestHeader=name,value | AddRequestHeader=X-Id,123 | 
| RemoveRequestHeader | 删除请求头 | RemoveRequestHeader=name | RemoveRequestHeader=X-Id | 
| SetRequestHeader | 设置请求头 | SetRequestHeader=name,value | SetRequestHeader=X-Id,123 | 
| AddResponseHeader | 添加响应头 | AddResponseHeader=name,value | AddResponseHeader=X-Id,456 | 
| RemoveResponseHeader | 删除响应头 | RemoveResponseHeader=name | RemoveResponseHeader=X-Id | 
| SetResponseHeader | 设置响应头 | SetResponseHeader=name,value | SetResponseHeader=X-Id,456 | 
说明:
- StripPrefix: 去除路径前缀,如/api/user -> /user
- PrefixPath: 添加路径前缀,如/user -> /api/user
- AddRequestHeader: 添加请求头
- RemoveRequestHeader: 删除请求头
- SetRequestHeader: 设置请求头
- AddResponseHeader: 添加响应头
- RemoveResponseHeader: 删除响应头
- SetResponseHeader: 设置响应头
所有过滤器均为可选配置。
📝 配置示例 
基础路由配置 
yaml
# 基础路由配置示例
gateway:
  routes:
    - id: api-service
      uri: lb://api-service
      predicates:
        - Path=/api/**
      filters:
        - StripPrefix=1高级路由配置 
yaml
# 高级路由配置示例 - 包含多种断言和过滤器
gateway:
  routes:
    - id: web-service
      uri: lb://web-service
      predicates:
        - Path=/web/**
        - Method=GET,POST
        - Header=X-Request-Id,\d+
        - Query=name
        - Host=**.example.com
        - XForwardedRemoteAddr=192.168.1.0/24,10.0.0.*
      filters:
        - StripPrefix=1
        - AddRequestHeader=X-Request-Id,123
        - AddResponseHeader=X-Response-Id,123基于IP地址的路由配置 
yaml
# 基于IP地址的路由配置示例 - 内网和外网分别路由到不同服务
gateway:
  routes:
    # 内网用户路由到内网服务
    - id: internal-api
      uri: lb://internal-api-service
      predicates:
        - Path=/api/**
        - XForwardedRemoteAddr=192.168.0.0/16,10.0.0.0/8,172.16.0.0/12
      filters:
        - StripPrefix=1
        - AddRequestHeader=X-Network-Type,internal
    
    # 外网用户路由到公网服务
    - id: public-api
      uri: lb://public-api-service
      predicates:
        - Path=/api/**
      filters:
        - StripPrefix=1
        - AddRequestHeader=X-Network-Type,public💡 最佳实践 
路由配置建议 
- 路由ID命名规范 - 使用有意义的名称
- 遵循命名规范
- 便于识别和管理
 
- URI配置建议 - 优先使用服务名
- 避免使用具体IP
- 支持动态扩缩容
 
- 断言条件建议 - 从精确到模糊
- 避免路由冲突
- 合理使用通配符
 
- IP地址断言建议 - 优先使用CIDR网段
- 合理规划内外网路由
- 注意路由优先级顺序
- 考虑代理和负载均衡器的IP
 
- 安全配置建议 - 使用配置中心
- 避免硬编码
- 限制访问范围
 
❓ 常见问题 
1. 路由不生效? 
检查清单:
- ✓ 路由ID是否重复
- ✓ 断言条件是否正确
- ✓ 目标服务是否正常
- ✓ 网关日志是否有错误
2. 性能问题? 
优化建议:
- ✓ 合理设置超时时间
- ✓ 使用合适的负载均衡策略
- ✓ 避免过多的过滤器
- ✓ 定期清理无效路由
3. IP地址断言不匹配? 
排查步骤:
- ✓ 检查客户端真实IP地址
- ✓ 确认是否经过代理或负载均衡器
- ✓ 验证CIDR网段格式是否正确
- ✓ 检查通配符匹配规则
- ✓ 查看网关日志中的IP匹配信息
🆘 技术支持 
如果遇到问题:
- 检查配置文件
- 查看网关日志
- 分析错误信息
- 联系技术支持
重要提示
- 定期检查路由配置
- 及时更新服务信息
- 注意安全配置
- 做好监控告警