什麼是反向代理?與正向代理的區別、目的與使用場景一覽
1. 先說明代理(Proxy)
代理伺服器(proxy server)是 位於客戶端與伺服器之間的「代理伺服器」。客戶端不直接向伺服器發送請求,而是將請求送給代理,代理再代表客戶端與伺服器通訊,最後將結果回傳給客戶端。
代理伺服器根據「站在哪一方(客戶端側 / 伺服器側)」的不同,名稱與角色也會不同。
- 站在客戶端側,處理外部網路請求 → 正向代理(Forward Proxy)
- 站在伺服器側,處理外部進來的請求 → 反向代理(Reverse Proxy)
2. 正向代理(Forward Proxy):客戶端側代理
正向代理通常是我們聽到「代理伺服器」時想到的概念。
2.1 運作結構
客戶端 → 正向代理 → 網際網路(多個伺服器)
- 客戶端不直接連到網際網路,而是先發送請求給正向代理。
- 正向代理代表客戶端向外部伺服器發送請求,收到回應後再回傳給客戶端。
2.2 主要用途
- 隱藏客戶端 IP
- 從外部伺服器的角度,只能看到代理的 IP,真正使用者的 IP 會被隱藏。
- 存取控制 / 過濾
- 公司或學校會用來封鎖特定網站(如 YouTube、SNS)等。
- 快取
- 將常見的外部網頁快取於代理,節省網路頻寬並提升速度。
- 紀錄與監控
- 記錄誰、何時、訪問了哪些網站。
2.3 使用範例
- 公司/學校的 內部代理伺服器
- 用於繞過國家封鎖的 網頁代理
- 一些 VPN 服務(代理客戶端流量)
→ 總結:正向代理是 「客戶端外出時」 使用的代理。
3. 反向代理(Reverse Proxy):伺服器側代理
反向代理則相反,站在伺服器側的代理。客戶端實際上向反向代理發送請求,但外觀上看起來像是直接向「服務地址」發送。
3.1 運作結構
客戶端 → 網際網路 → 反向代理 → 內部伺服器(Web 伺服器、API 伺服器等)
流程分為幾個步驟:
1. 客戶端向 https://example.com 發送請求。
2. DNS 指向的不是實際 Web 伺服器,而是 反向代理。
3. 反向代理執行
* 負載平衡
* 認證/授權
* 快取
* 安全檢查(WAF)等
4. 反向代理將請求轉發至內部實際伺服器(A、B、C 中的一個)。
5. 內部伺服器回應後,再經由反向代理回傳給客戶端。
3.2 為什麼叫「Reverse」?
與正向代理相比,方向相反。
- 正向代理:位置在客戶端前方,流向為「客戶端 → 正向代理 → 外部伺服器」。
- 反向代理:位置在伺服器前方,流向為「客戶端(外部) → 反向代理 → 內部伺服器」。
因此,從「客戶端出發」與「伺服器接收」的角度來看,名稱「Reverse」是合適的。
4. 正向代理 vs 反向代理 一覽比較
| 分類 | 正向代理(Forward Proxy) | 反向代理(Reverse Proxy) |
|---|---|---|
| 位置 | 客戶端與網際網路之間 | 網際網路(客戶端)與內部伺服器之間 |
| 主要關注 | 客戶端保護 / 控制 | 伺服器保護 / 運營優化 |
| 主要目的 | IP 隱藏、存取限制、過濾、快取 | 負載平衡、SSL 終止、安全、快取、URL 路由 |
| 安全觀點 | 內部保護客戶端外發流量 | 隱藏內部伺服器,外部只見代理 |
| 主要使用者 | 公司/學校 IT、一般使用者 | 服務運營者、後端/基礎設施工程師 |
| 代表範例 | 內部代理、網頁過濾代理、部分 VPN | Nginx、HAProxy、AWS ALB、Cloudflare、Akamai 等 |
5. 反向代理的主要功能
以下列出反向代理常見的功能,說明其用途與實際應用。
5.1 負載平衡(Load Balancing)
問題:服務流量過大,單一 Web 伺服器無法承載;需要多台相同功能的伺服器。
反向代理的角色: * 接收進來的請求,將其分散到多台後端伺服器。 * 例如 Round Robin、Least Connections 等演算法。 * 若某台伺服器失效,可透過健康檢查停止將流量送往該伺服器。
使用範例: * Nginx 或 HAProxy 作為負載平衡器,後面接多台應用伺服器。 * AWS ALB(Application Load Balancer)等雲端負載平衡器。
5.2 SSL/TLS 終止(SSL Offloading)
問題:所有 Web 伺服器都要處理 HTTPS(SSL/TLS),CPU 負擔大;證書管理繁瑣。
反向代理的角色: * 在代理層完成 HTTPS 的終止(解密),將內部流量以 HTTP 或內部 TLS 傳遞。 * 證書只需在代理上管理,簡化維護。
使用範例:
* https://example.com 的流量在 Nginx 反向代理終止,後端應用伺服器使用 http://app1:8080、http://app2:8080 通訊。
5.3 安全(WAF、防火牆、伺服器隱藏)
問題:Web 應用易受 SQL Injection、XSS、DDoS 等攻擊;想隱藏內部結構。
反向代理的角色: * 以 WAF(Web Application Firewall) 過濾惡意請求。 * 只允許特定路徑或方法,其他則封鎖。 * 內部伺服器僅存在於私有網路,外部只能見到代理。
5.4 快取(Caching)
問題:靜態內容(圖片、CSS、JS)請求頻繁,直接到後端效率低。
反向代理的角色: * 在代理層快取靜態檔案,直接回應。 * 減輕後端負載、提升回應速度。 * CDN(Cloudflare、Akamai 等)本質上也是反向代理 + 快取。
5.5 URL 路由 / API Gateway 角色
問題:單一域名下運營多個服務(Web、API、管理頁面等),或微服務架構分散多個後端。
反向代理的角色:
* 根據域名或路徑將請求路由到不同伺服器:
* /api → API 伺服器
* /admin → 管理後端
* /static → 靜態檔案伺服器
* 作為 API Gateway,統一處理認證、授權、速率限制等。
範例
https://example.com/ → web-frontend 服務
https://example.com/api/ → api-gateway 服務
https://example.com/admin/ → admin-backend 服務
6. 何時使用哪種代理?
6.1 正向代理需要的情境
- 公司需要監控/控制員工上網。
- 學校、公共機構封鎖特定網站。
- 內部使用者想集中管理出口流量。
- 客戶端想隱藏 IP 與外部通訊。
→ 關鍵字:客戶端保護、使用者網路管理/控制。
6.2 反向代理需要的情境
- 網站流量增加,需要多台伺服器負載平衡。
- 想集中管理 HTTPS 證書(SSL 終止)。
- 想隱藏內部伺服器,並加強安全層。
- 想利用靜態資源快取提升效能。
- 需要在單一域名下路由多個後端服務。
- 微服務架構下需要 API Gateway/Edge Proxy。
→ 關鍵字:伺服器保護、服務擴展、運營便利、效能優化。
7. 總結
- 代理伺服器是客戶端與伺服器之間的「代理」。
- 正向代理(Forward Proxy):位於客戶端側,主要用於隱藏 IP、存取控制、過濾、快取。
- 反向代理(Reverse Proxy):位於伺服器側,主要用於負載平衡、SSL 終止、安全(WAF)、快取、URL 路由與 API Gateway。
- 在實際服務運營中,反向代理往往是伺服器前端基礎設施的核心組件,常見實作包括 Nginx、HAProxy、AWS ALB、Cloudflare、Akamai 等。

目前沒有評論。