828 字
约 2 分钟
11
S17-B04 · 网关:统一入口与跨域
适用读者:分不清"网关"和"Nginx"该放哪层的人。
前置:S17-B01、S15-A01。
覆盖旧文:910(81) 911(90) 1562(169) 1859(156) 419(66) 414(58) = 620 点。
覆盖扩展:E-S17-014(网关的五个职责边界)。
上一篇:S17-B03 · 服务调用:RPC、负载均衡与 Dubbo
下一篇:S17-B05 · 配置中心。
1. 一句话结论
Nginx 管"流量"(TLS、静态、压缩、简单反代),网关管"业务入口"(鉴权、限流、路由到服务、协议转换、跨域)。两者常常一起用,不是替代关系。
| 能力 | Nginx | 业务网关(Gateway/APISIX) |
|---|---|---|
| TLS 终止 | ✅ | 可 |
| 静态资源 | ✅ | ❌ |
| 鉴权/JWT 校验 | ⚠️ 需写 Lua | ✅ |
| 按服务名路由 | ❌(按路径/上游) | ✅(接注册中心) |
| 限流 | 基础 | ✅(按用户/接口) |
| 跨域(CORS) | 可 | ✅(对服务统一处理) |
2. 网关的五个职责(E-S17-014)
① 路由:/api/order/** → order-service
② 鉴权:统一校验 token(服务内不再重复)
③ 限流:按 IP/用户/接口
④ 协议与聚合:对外 HTTP → 内部 RPC;BFF 聚合
⑤ 可观测:统一 traceId/访问日志
判据:"这个能力是"所有服务都需要"吗?" 是 → 放网关(一次配好);只个别服务需要 → 放服务内。
反例:把业务校验放网关 → 网关变成"第二个业务系统",每次改规则都要动入口。
3. 路由与跨域
| 配置 | 说明 |
|---|---|
| 路径路由 | /api/order/**(最常用) |
| 服务名路由 | 需接注册中心(Spring Cloud Gateway 的 lb://) |
| 跨域 | 网关统一加 CORS 头(别让每个服务各配一遍) |
"跨域为什么放网关":预检请求(OPTIONS)不该打到每个服务——网关统一回,省事且一致。
4. 网关自身的高可用
| 风险 | 缓解 |
|---|---|
| 网关是单点 | 多实例 + 负载均衡 |
| 网关被大流量打挂 | 自身限流 + 隔离 |
| 配置错误导致全站 502 | 灰度发布 + 可回滚(S15-A02) |
"网关挂了是不是全站挂":是——所以它必须比任何业务服务更稳(无状态、少依赖、可快速回滚)。
5. 五个误区
| 误区 | 真相 |
|---|---|
| "网关能替代 Nginx" | 静态资源/压缩仍归 Nginx |
| "业务逻辑放网关更省事" | 网关会变成第二业务系统 |
| "跨域每个服务配一遍" | 应在网关统一 |
| "网关只是转发" | 鉴权/限流/trace 都在这里 |
| "网关不需要高可用" | 它是全站单点 |
6. 自检
- Nginx 与网关的分工?
- 网关的五个职责?
- 什么该放网关、什么不该?
- 跨域为什么放网关?
- 网关自身怎么保高可用?
7. 下一篇
S17-B05 · 配置中心与热更新
网关讲完,下一篇讲"配置改了要不要重启"。
本篇属于系列《S17 · 分布式与消息队列》。旧文来源:A-910/911/1562/1859/419/414;扩展点 E-S17-014。
S17-B04 · 网关:统一入口与跨域
https://www.clxhxhhr.top/posts/5422/ 评论
0 条
还没有评论,先写一条吧。