本文為 Web 架構進化史 系列文,第 6 篇:
當你的 API 需要一位全能保鑣
想像你經營一間熱門餐廳(API 服務),客人(客戶端)絡繹不絕,但卻遇到各種問題:有人插隊、有人吃霸王餐、甚至有人試圖溜進廚房搞破壞。
此時,你需要一位經驗豐富的店長(反向代理)和一套智慧管理系統(API Gateway),幫你維持秩序、過濾風險、還能自動處理繁瑣任務。
本文將帶新手理解如何用 反向代理 與 API Gateway 為你的 API 穿上盔甲,從基礎的 Nginx 設定到雲端服務實戰,一步步打造安全高效的 API 管理架構。
反向代理:API 的「前台接待員」
什麼是反向代理(Reverse Proxy)?
在網路架構中,反向代理(Reverse Proxy)是一種位於客戶端(Client)與後端伺服器(Backend Server)之間的代理伺服器。
它的主要作用是接收來自客戶端的請求,然後將請求轉發給後端伺服器處理,並將伺服器的回應返回給客戶端。
這種設計不僅提高了安全性,還能提升效能與靈活性。
可以將反向代理比喻成企業的「前台接待員」,當訪客(使用者)來到公司時,接待員會先與訪客確認需求,然後引導訪客到正確的部門,而不是讓訪客直接進入公司內部。
這種方式能夠有效管理流量、提高安全性,並確保企業內部運作順暢。
反向代理的關鍵功能
使用反向代理的好處很多,以下是幾個主要功能:
- 隱藏真實伺服器資訊
- 反向代理可以遮蔽後端伺服器的真實 IP 位址,防止攻擊者直接存取後端系統。
- 保護內部架構細節,減少潛在的安全風險,例如 DDoS 攻擊或惡意流量探測。
- 負載平衡(Load Balancing)
- 當有多台後端伺服器時,反向代理可以根據不同的策略(例如輪詢、最少連線數、IP 哈希等)將流量分配到不同伺服器,確保系統穩定運行。
- 避免單一伺服器過載,提高系統的可用性與擴展性。
- SSL 終端(SSL Termination)
- 反向代理可以統一處理 HTTPS 加密與解密,減少後端伺服器的負擔。
- 這樣後端伺服器可以專注於應用邏輯,而不用處理 SSL/TLS 加密運算,提升效能。
- 緩存靜態內容(Caching)
- 反向代理可以快取靜態資源(如圖片、CSS、JavaScript),減少對後端伺服器的請求數量,提高響應速度。
- 特別適合高流量網站,能有效降低頻繁請求帶來的壓力。
用 Nginx 快速設定反向代理
需求場景
假設你的 API 伺服器正在本機 http://localhost:3000 運行,你希望使用 api.yourdomain.com 這個網域來對外提供 API 服務,並透過 Nginx 來設定反向代理。
步驟 1:安裝 Nginx
在 Linux 伺服器上安裝 Nginx,這裡以 Ubuntu 為例:
sudo apt update
sudo apt install nginx
步驟 2:設定反向代理配置
Nginx 透過 配置檔(Configuration File) 來管理網站與代理規則。
我們需要建立一個新的設定檔,並定義 API 的反向代理規則。
- 創建新的 Nginx 設定檔:
sudo nano /etc/nginx/sites-available/api_proxy.conf- 新增以下內容:
listen 80;→ 監聽 80 埠(HTTP)server_name api.yourdomain.com;→ 指定要處理的網域proxy_pass http://localhost:3000;→ 將請求轉發到本機的 3000 埠(API 伺服器)proxy_set_header→ 設定標頭,確保請求來源資訊能正確傳遞給後端
server {
listen 80;
server_name api.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
步驟 3:啟用設定並重啟 Nginx
- 建立符號連結,將設定檔啟用:
sudo ln -s /etc/nginx/sites-available/api_proxy.conf /etc/nginx/sites-enabled/- 測試 Nginx 配置是否正確:
sudo nginx -t- 若顯示
syntax is ok與test is successful,即可重新啟動 Nginx 使設定生效:
sudo systemctl restart nginx常見反向代理工具
1️⃣ Nginx – 高效能 Web 伺服器 & 反向代理
🔹 適用場景: API 代理、大型網站、負載平衡
🔹 優勢:
✅ 高效能事件驅動架構,適合高併發
✅ 內建負載平衡、快取、SSL 處理
✅ 靜態資源處理快,適用於網站與 API
2️⃣ Apache HTTP Server – 適合傳統 Web 架構的反向代理
🔹 適用場景: 已使用 Apache 的環境
🔹 優勢:
✅ 內建 mod_proxy,可作為反向代理
✅ .htaccess 設定靈活,可微調特定路徑的代理行為
✅ 可與 PHP、Perl、CGI 整合,適合舊有架構
3️⃣ HAProxy – 專業級負載平衡與反向代理
🔹 適用場景: 高流量 API、分散式系統
🔹 優勢:
✅ 超低延遲,高併發環境最佳選擇
✅ 支援 TCP(第 4 層)與 HTTP(第 7 層)代理
✅ 健康檢查與動態流量分配
4️⃣ Caddy – 簡單易用、自動 SSL 的反向代理
🔹 適用場景: 小型網站、個人專案
🔹 優勢:
✅ 預設支援 HTTPS(Let’s Encrypt),免手動設定憑證
✅ 設定檔簡潔(類似 Nginx,但語法更簡單)
✅ 適合快速開發、個人網站或簡單 API 代理
5️⃣ Traefik – 最適合 Docker & Kubernetes 的反向代理
🔹 適用場景: Docker / Kubernetes 環境
🔹 優勢:
✅ 自動偵測 Docker、Kubernetes 服務並設定反向代理
✅ 內建 Let’s Encrypt SSL,免手動配置憑證
✅ 提供 Web 介面監控流量,方便管理
6️⃣ Envoy – 適合微服務架構的高階 API Gateway
🔹 適用場景: 微服務(Service Mesh)、API Gateway
🔹 優勢:
✅ 支援 gRPC、WebSocket、HTTP/2,適合微服務架構
✅ 內建進階 流量控制、故障切換、動態路由
✅ 適合 Kubernetes、Istio、服務網格(Service Mesh)
各種反向代理工具比較
不同的反向代理工具適用於不同場景,以下是幾種常見選擇:
| 工具 | 主要用途 | 優勢 | 適用場景 |
|---|---|---|---|
| Nginx | 反向代理 / Web 伺服器 / 負載平衡 | 高效能、可快取、靜態資源處理強 | API 代理、大型網站、負載平衡 |
| Apache HTTP Server | Web 伺服器 / 反向代理 | 可用 .htaccess 靈活設定,適合傳統 Web 架構 | 已使用 Apache 的環境 |
| HAProxy | 負載平衡 / 反向代理 | 高併發、低延遲、專業負載平衡 | 高流量 API、分散式架構 |
| Caddy | 簡單易用 / 內建 SSL | 設定簡單、內建 Let’s Encrypt SSL | 小型網站、快速建置 |
| Traefik | 微服務 / Docker / Kubernetes | 自動偵測容器服務、支援動態配置 | Docker / Kubernetes 環境 |
| Envoy | 微服務 / API Gateway | 高度擴展、進階流量控制、支援 gRPC | 微服務架構(Service Mesh) |
總結:哪個反向代理最適合你?
- ✅ 一般 API 代理 / 負載平衡 → Nginx、HAProxy
- ✅ 已使用 Apache,想增加反向代理功能 → Apache HTTP Server
- ✅ 高流量、高併發環境 → HAProxy、Nginx
- ✅ 簡單快速搭建 HTTPS 反向代理 → Caddy
- ✅ Docker / Kubernetes 微服務架構 → Traefik、Envoy
- ✅ 進階 API Gateway、微服務流量管理 → Envoy
進階功能:為 API 加上 SSL 保護
為了確保 API 服務的安全性,應該使用 HTTPS,而不是 HTTP。
我們可以透過 Let’s Encrypt 申請免費的 SSL 憑證,並讓 Nginx 自動配置 HTTPS。
步驟 1:安裝 Certbot(Let’s Encrypt 客戶端)
sudo apt install certbot python3-certbot-nginx步驟 2:申請並安裝 SSL 憑證
執行以下命令,為 api.yourdomain.com 申請 SSL 憑證:
sudo certbot --nginx -d api.yourdomain.com--nginx→ 讓 Certbot 自動調整 Nginx 配置-d api.yourdomain.com→ 指定申請憑證的網域名稱
步驟 3:驗證與自動續約
安裝成功後,Certbot 會自動修改 Nginx 配置,使 HTTP 轉向 HTTPS,並啟用 SSL 憑證。你可以手動測試憑證是否正確:
sudo certbot renew --dry-runLet’s Encrypt 憑證有效期為 90 天,但 Certbot 預設會自動續約,因此無需手動操作。
API Gateway:從保鑣升級為「智慧管家」
在現代應用架構中,API(Application Programming Interface,應用程式介面) 已經成為不同系統之間溝通的橋樑。
隨著 API 數量的增長與使用需求的增加,單純的 反向代理(Reverse Proxy) 已經無法滿足現代 API 管理的需求,因此 API Gateway 應運而生。
可以將 反向代理 想像成大樓的 保全人員,負責攔截與轉發訪客。
而 API Gateway 則更像是一名智慧管家,不僅能夠管理訪客進出,還能進行身份驗證、流量控制、版本管理,甚至提供監控與分析,確保 API 的安全與效能。
為什麼需要 API Gateway?
隨著微服務架構的普及,應用系統變得更加分散且複雜,API 需要具備更高的安全性與可管理性,這時 API Gateway 就發揮了關鍵作用。
| 功能 | 反向代理 | API Gateway |
|---|---|---|
| 路由轉發 | ✔️ | ✔️ |
| 負載平衡 | ✔️ | ✔️ |
| 速率限制 | ❌(需外掛) | ✔️ 內建支援 |
| 身份驗證 | ❌ | ✔️(JWT、OAuth 等) |
| API 監控 | ❌ | ✔️ |
| 數據分析 | ❌ | ✔️ 提供可視化面板 |
| 版本管理 | ❌ | ✔️(/v1、/v2 路由) |
API Gateway 能夠解決的核心問題
- 統一管理 API 入口點
- 不同 API 服務可以透過 單一網關 管理,避免前端直接連接後端多個 API,提升安全性。
- 身份驗證與授權機制
- 內建 JWT、OAuth、API Key 等驗證方式,確保 API 只能被授權的應用存取。
- 請求速率限制(Rate Limiting)
- 防止 API 遭到濫用或惡意攻擊(如 DDoS),確保系統穩定性。
- API 監控與日誌管理
- 提供 請求記錄、錯誤追蹤、效能監控,讓開發人員可以即時掌握 API 的運作情況。
- 版本管理與路由控制
- 支援 API 版本化(如
/v1/users、/v2/users),讓開發者可以安全地發佈 API 更新,而不影響現有使用者。
- 支援 API 版本化(如
AWS API Gateway:全託管的雲端解決方案
AWS API Gateway 是 Amazon Web Services 提供的一款 全託管 API Gateway 服務。
可用於建立、管理和保護 API,並與 AWS 其他服務(如 Lambda、DynamoDB)無縫整合,適合雲端應用開發。
🔹 核心優勢
✅ 無需管理伺服器 – AWS 全權負責基礎設施,開發者專注於 API 本身
✅ 與 AWS 生態整合 – 可直接與 AWS Lambda、DynamoDB、S3 等 AWS 服務對接
✅ 內建安全功能 – 支援 IAM 權限控管、API Key、CORS 設定
✅ 支援 REST API、WebSocket API 及 HTTP API – 適合不同應用場景
✅ 提供流量控制與監控 – 可設定 速率限制、使用計畫(Usage Plans)、CloudWatch 日誌分析
🔹 建立一個簡單的 REST API
- 進入 AWS 控制台,選擇 API Gateway → 建立 REST API
- 設定資源與方法(如
/products,支援GET、POST等 HTTP 方法) - 整合後端服務(選擇 Lambda 函數 或 HTTP 端點 作為 API 的後端)
- 部署到指定階段(如
dev、prod) - 取得 API 端點(如
https://abc123.execute-api.us-east-1.amazonaws.com/dev)
🔹 進階功能應用
- 使用 Usage Plans 管理 API Key
- 設定速率限制(限制 API 允許的最大請求數)
- 啟用 CloudWatch 監控 API 訪問記錄
AWS API Gateway 適合無伺服器架構(Serverless),如果你的 API 主要運行在 AWS 環境,那麼它是一個理想的選擇。
Kong:開源 API Gateway 的瑞士刀
Kong 是一款基於 Nginx 的開源 API Gateway,具備高效能與高度擴展性,被廣泛應用於企業級 API 管理。
🔹 特色
✅ 基於 Nginx – 高效能、穩定可靠
✅ 外掛(Plugins)生態豐富 – 超過 100 種外掛(身份驗證、速率限制、日誌管理等)
✅ 支持自架設與雲端版 – 可選擇開源版(Kong Gateway OSS)或企業版(Kong Cloud)
✅ 支援分散式部署 – 可與 Kubernetes、Docker、微服務架構 整合
🔹 快速入門
1️⃣ 啟動 Kong(使用 Docker)
- 創建 Docker 網路
docker network create kong-net- 啟動 PostgreSQL 作為資料庫
docker run -d --name kong-db --network=kong-net -e "POSTGRES_DB=kong" postgres:13- 啟動 Kong
docker run -d --name kong --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-db" -p 8000:8000 -p 8443:8443 kong:latest2️⃣ 新增 API 路由
curl -i -X POST http://localhost:8001/services \
--data "name=my-api" \
--data "url=http://mockbin.org"
curl -i -X POST http://localhost:8001/services/my-api/routes \
--data "paths[]=/my-api"
3️⃣ 測試 API
curl -i http://localhost:8000/my-api🔹 常用外掛(Plugins)
| 外掛名稱 | 功能 |
|---|---|
| rate-limiting | 限制請求速率,防止 API 被濫用 |
| jwt | JWT 驗證,確保 API 只允許授權使用者存取 |
| cors | 管理跨域權限,允許不同網域存取 API |
| request-transformer | 修改 API 請求與回應內容 |
自架 vs. 雲端託管:哪種解決方案最適合你?
不同的 API 管理方式適用於不同的企業需求,以下是三種主要方案的比較:
| 考量點 | Nginx(自架) | AWS API Gateway(雲端) | Kong(開源 API Gateway) |
|---|---|---|---|
| 維護成本 | 高(需要自行更新與擴容) | 低(AWS 全託管,無需維護) | 中(需管理基礎設施與資料庫) |
| 彈性 | 高(可完全自訂) | 中(受限於 AWS 功能) | 高(支援外掛擴充) |
| 初期成本 | 低(開源免費,但需伺服器成本) | 按用量計費(免費額度有限) | 低(開源版免費,企業版需付費) |
| 安全性 | 需自行配置 WAF、DDoS 防護 | 內建 IAM、API Key、DDoS 防護 | 可透過外掛(JWT、OAuth)增強安全 |
| 適合場景 | 小型專案、已有 DevOps 團隊 | 快速上線、雲端原生應用 | 需要高度客製化的企業架構 |
什麼時候該選哪種方案?
✅ 如果你的團隊有專業的運維能力,想要完全掌控 API 架構 → Nginx 自架
✅ 如果你希望快速上線、減少基礎設施管理 → AWS API Gateway(或其他雲端解決方案)
✅ 如果你的 API 需求複雜,需要靈活擴充身份驗證、限流等功能 → Kong
混合架構實例:自架 + 雲端的最佳組合
有時候,單一方案可能無法滿足所有需求,因此可以採用 混合架構(Hybrid Architecture),結合雲端的便利性與自架 API Gateway 的彈性,同時提供高安全性與效能最佳化。
🔹 架構示意圖

🔹 架構解讀
1️⃣ AWS API Gateway
- 負責外部請求處理,提供 身份驗證、速率限制 及 DDoS 防護
- 將 API 請求路由至內部 Kong Gateway
2️⃣ Kong API Gateway(自架)
- 負責內部微服務管理,處理 負載平衡、身份驗證、細粒度控制
- 可與內部資料庫、第三方 API 整合
✅ 這種架構的優勢:
- 外部流量由 AWS API Gateway 處理,確保 API 安全與高可用性
- 內部流量由 Kong 管理,提供靈活的 API 路由與擴展能力
- 減少 AWS API Gateway 的費用(只用於流量入口),降低 API 存取成本
實戰:用反向代理與 API Gateway 實現三層防護
情境需求:你的 API 需要滿足以下安全與管理要求:
✅ 對外隱藏真實 API 伺服器 IP,防止惡意攻擊
✅ 全站強制 HTTPS,確保數據傳輸安全
✅ 對 /api/ 設定速率限制,防止 API 濫用
✅ 紀錄所有 API 請求日誌,便於監控與錯誤追蹤
解決方案:使用 Nginx + Kong 搭建三層 API 防護
1️⃣ Nginx(第一層) – 負責外部請求攔截與 HTTPS 加密
2️⃣ Kong(第二層) – 提供 API 速率限制與日誌記錄
3️⃣ 後端微服務(第三層) – 最終處理 API 請求
使用 Nginx + Kong 實作
🔹 第一層:Nginx 設定(負責 SSL 與隱藏 API 伺服器)
Nginx 主要用來處理 HTTPS 強制跳轉,並將 API 請求轉發給 Kong Gateway。
# 強制跳轉 HTTPS
server {
listen 80;
server_name api.yourcompany.com;
return 301 https://$host$request_uri;
}
# HTTPS 反向代理到 Kong
server {
listen 443 ssl;
server_name api.yourcompany.com;
ssl_certificate /etc/letsencrypt/live/api.yourcompany.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourcompany.com/privkey.pem;
location / {
proxy_pass http://kong:8000;
proxy_set_header Host $host;
}
}
🔹 第二層:Kong 設定(負責 API 速率限制與日誌記錄)
1️⃣ 啟用 API 速率限制(Rate Limiting)
防止過多請求影響 API 伺服器效能,例如:
- 限制 每秒最多 10 次請求
- 限制 每小時最多 1000 次請求
curl -X POST http://kong:8001/plugins \
--data "name=rate-limiting" \
--data "config.second=10" \
--data "config.hour=1000"
2️⃣ 啟用請求日誌記錄
所有 API 訪問記錄將被寫入 /var/log/kong/requests.log,便於監控與排查問題。
curl -X POST http://kong:8001/plugins \
--data "name=file-log" \
--data "config.path=/var/log/kong/requests.log"
總結:管理 API 就像經營企業
API 管理不僅僅是提供 API 服務,還需要考慮 安全性、效能、監控與擴展性。
你可以將 API 基礎設施比喻為企業運營中的不同角色:
🏢 反向代理(Nginx)= API 的前線員工 – 負責基本的請求管理、負載平衡、SSL 加密
👨💼 API Gateway(Kong)= API 經理人 – 負責 API 授權、限流、監控、版本管理
🛠 雲端服務(AWS API Gateway)= API 顧問 – 幫助企業快速上線、減少基礎設施維護
無論選擇哪種架構,關鍵在於:
✅ 分層防護 – 讓不同層級的工具發揮各自的作用
✅ 持續監控 – 使用日誌與分析工具掌握 API 服務狀態
✅ 彈性擴展 – 隨著業務增長靈活調整 API 架構
選擇適合你的 API Gateway 架構,讓 API 管理變得更智慧、更安全! 🚀
新手常見問答
Nginx 需搭配外掛(如 Lua 模組)才能實現進階功能,但維護複雜度高。API Gateway 提供開箱即用的解決方案。
會。若考慮多雲部署,可選 Kong 或開源方案保持彈性。
否,Kong 也支援原生安裝,但 Docker 能簡化依賴管理。