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. 自检

  1. Nginx 与网关的分工?
  2. 网关的五个职责?
  3. 什么该放网关、什么不该?
  4. 跨域为什么放网关?
  5. 网关自身怎么保高可用?

7. 下一篇

S17-B05 · 配置中心与热更新

网关讲完,下一篇讲"配置改了要不要重启"。


本篇属于系列《S17 · 分布式与消息队列》。旧文来源:A-910/911/1562/1859/419/414;扩展点 E-S17-014。

S17-B04 · 网关:统一入口与跨域
https://www.clxhxhhr.top/posts/5422/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。