一、Nginx 和 Gateway 的關系:是替代還是協作?
不是替代關系,而是協作關系。
1. Nginx 的角色(通常在最外層)
-
反向代理 & 負載均衡:將前端請求分發到多個后端服務或網關實例。
-
靜態資源服務:部署前端(如 Vue/React 打包后的靜態文件)。
-
SSL 終止:處理 HTTPS,減輕后端壓力。
-
安全防護:如防 DDOS、限流、WAF(配合模塊)。
-
高可用入口:作為整個系統的統一入口。
2. API Gateway 的角色(在微服務層前面)
-
服務路由:根據路徑將請求轉發到具體的微服務(如?
/user/**
?→ user-service)。 -
認證鑒權:統一處理 JWT、OAuth2 等。
-
限流熔斷:防止某個服務被壓垮。
-
日志監控:統一記錄請求日志、鏈路追蹤。
-
協議轉換:如 REST → gRPC。
二、典型架構圖(高可用 + 高并發)
用戶 → DNS → [Nginx LB (HA)] → [API Gateway 集群] → [微服務集群]↑ ↑(靜態資源) (動態路由/鑒權/限流)
組件說明:
-
Nginx 集群(主備或雙活):使用 Keepalived + VIP 實現高可用。多臺 Nginx 前置負載均衡(可再加 LVS/F5 或云 SLB)。
-
API Gateway 集群:多實例部署,注冊到 Nginx 或服務發現(如 Nacos/Eureka)。支持橫向擴展,應對高并發。
-
微服務集群:每個服務多實例部署,通過注冊中心發現。
三、配置示例
1. Nginx 配置(反向代理到 Gateway)
# nginx.conf 或 conf.d/gateway.confupstream gateway_backend {server 192.168.1.10:8080 weight=5; # Gateway 實例1server 192.168.1.11:8080 weight=5; # Gateway 實例2# 可配置健康檢查keepalive 32;
}server {listen 80;server_name api.yourdomain.com;# 靜態資源(前端)location / {root /usr/share/nginx/html;try_files $uri $uri/ /index.html;}# 動態請求代理到網關location /api/ {proxy_pass http://gateway_backend;proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# WebSocket 支持location /ws/ {proxy_pass http://gateway_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
}
2. Spring Cloud Gateway 配置(application.yml)
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-service # 從注冊中心負載均衡predicates:- Path=/api/user/**filters:- StripPrefix=2 # 去掉 /api/user 前綴- id: order-serviceuri: lb://order-servicepredicates:- Path=/api/order/**filters:- StripPrefix=2# 全局限流(Redis + Token Bucket)redis-rate-limiter:replenishRate: 10 # 每秒補充10個令牌burstCapacity: 20 # 桶容量20# 服務發現(如 Nacos)nacos:discovery:server-addr: 192.168.1.100:8848
四、如何實現高可用 & 高并發?
五、常見誤區
??只用 Nginx 不用 Gateway→ 適合簡單系統,但微服務多了難以維護路由和鑒權。
??只用 Gateway 不用 Nginx→ Gateway 也能做負載均衡,但 Nginx 更成熟,適合做最外層防護和靜態資源服務。
??推薦:Nginx + Gateway 協同工作
-
Nginx 做“門衛”和“前臺”
-
Gateway 做“調度中心”和“安全審計”
六、進階建議
-
使用云原生方案:如 Kubernetes + Ingress (Nginx Ingress Controller) + Istio/Envoy Gateway。
-
自動化部署:配合 CI/CD 工具(Jenkins/GitLab CI)自動發布 Gateway 配置。
-
灰度發布:在 Gateway 層實現基于 Header 的流量切分。
-
性能壓測:使用 JMeter 或 wrk 測試 Nginx + Gateway 的吞吐能力。
總結
-
??前端用 Nginx 部署靜態資源
-
??后端用 API Gateway 做統一入口、路由、鑒權
-
??Nginx 反向代理到 Gateway 集群,實現高可用
-
??通過負載均衡、緩存、異步、集群化實現高并發
文章轉載自:古渡藍按
原文鏈接:高可用高并發微服務架構設計:Nginx 與 API Gateway 的協同實踐 - 古渡藍按 - 博客園
體驗地址:JNPF快速開發平臺