跳转至

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!