Nginx、Spring Cloud Gateway、Nacos
-
Nginx 作為最外層的入口點,接收所有外部流量,處理 SSL 終止,靜態資源緩存等。
-
Spring Cloud Gateway 位於 Nginx 之後,作為微服務的 API 網關,負責將請求路由到正確的後端微服務。它通過 Nacos 獲取服務註冊信息,知道每個服務的地址。
-
Nacos 提供服務發現功能,使 Gateway 能夠找到並路由到正確的服務實例,同時為所有服務提供動態配置管理。
這種架構的流量路徑通常是:
客戶端 → Nginx → Spring Cloud Gateway → 後端微服務 (通過 Nacos 發現)
使用 Nginx 反向代理 Nacos的好處
沒有 Nginx,攻擊者可以直接訪問 Nacos,甚至執行惡意請求! 用 Nginx 反向代理,只開放特定路徑,限制訪問權限。 Nginx 可以設定 HTTP Basic Auth,增加登入驗證。
location /nacos/ {
proxy_pass http://localhost:8848/;
auth_basic "Restricted Area"; # 啟用登入驗證
auth_basic_user_file /etc/nginx/.htpasswd;
}
外部用戶不能直接訪問 Nacos,只有通過 Nginx 才能進入!
隱藏內部架構
-
可以設定 不同域名、不同端口,避免暴露內部架構。
-
Nginx 充當 Nacos 的「保護殼」,外部只看到 Nginx,不知道 Nacos 的實際 IP!
server {
listen 80;
server_name nacos.example.com;
location / {
proxy_pass http://localhost:8848/;
}
}
訪問 http://nacos.example.com/,實際請求仍會轉發到內部的 Nacos,但外部用戶不知道內部是怎麼運作的!
SSL/HTTPS 支持
-
Nacos 預設使用 HTTP,沒有加密,可能會被中間人攻擊。
-
如果有密鑰、配置資訊,容易被攔截。
server {
listen 443 ssl;
server_name nacos.example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
location / {
proxy_pass http://localhost:8848/;
}
}
這樣所有 Nacos 相關的請求,都是 HTTPS 加密傳輸,避免資料外洩!
URL 簡化與跨域支援
-
Nacos 預設 API 是http://localhost:8848/nacos/v1/ns/service,很長很麻煩!
-
如果前端要直接訪問,可能會遇到 CORS (跨域) 問題。
# 簡化 URL
location /service {
proxy_pass http://localhost:8848/nacos/v1/ns/service;
}
# 允許跨域
location /nacos/ {
proxy_pass http://localhost:8848/;
add_header 'Access-Control-Allow-Origin' '*' always;
}
這樣前端開發者可以直接訪問http://nacos.example.com/service 不用寫一長串 URL!