正向代理:你請朋友走進大賣場,請他找到對的貨架,請他拿你想買的商品。
反向代理,你走進大賣場向店長說要買的東西,由店長幫你找到對的店員、對的櫃檯,買你想買的商品與結帳,就是反客為主、公親變事主!
在系統開發或者網站開發中,反向代理 (Reverse Proxy) 是在討論高流量、高併發網站架構、微服務部署,或是在使用像 Nginx 這類工具會出現,可說是這類系統的基礎建設之一。
不過乍聽之下,反向代理這詞,蟲一開始覺得有點反人類,那個語感就像是,原本代理就是 我 找 他 做事,而反向代理就像是 我 找 他 來幫 我 做事,不過再想一下、舉個例類同一下就通了,關鍵就在於:斷句與服務對象的不同!
我找 ,他來幫我做事
正向代理:幫你存取某某服務
反向代理:幫網站分配你的需求
就如前言所說,原本是你請你的朋友去大賣場、去小北買東西,是你朋友自己看指標、憑印象瞎拚蝦碰地找到貨架,最後找到你要的商品。
現在反過來,你一走進小北就直接有店長問你要找什麼、要辦什麼服務,更優質的是,店長還幫你找了店員幫你搬大水(礦泉水)、也幫你找會員卡專員幫你辦會員,這位優秀的小北店長就充分發揮了反向代理的角色。
反向代理?反客為主、公親變事主
先用「代理掮客」去想,掮客帶著你的需求去找服務,一樣接著上面的舉例,小北店長掮著你的需求,去找到對的服務(店員),這樣反客為主、公親變事主的情境,就是我用代理掮客來做最直覺地概念交換的解釋。
換回來用系統或網站來想,可以想像是某某網站、某某系統的門口就站著一位「掮客」、一位公司櫃檯的「接待人員」,當使用者上門,這位接待人會先詢問來意、確認需求,再將訊息轉交給內部的負責部門去處理。
以使用者的視角來看,其實從頭到尾都只和這位接待互動,完全不會接觸到公司內部的實際部門,也不清楚公司後台的運作細節,而代理(櫃台)已經在幫你找到對的人、完成你的需求再交付給你,這就是反向代理的概念。
反向代理通常部署在伺服器前端,負責攔截來自使用者的所有請求,再根據請求的路徑、網域、Header 或其他條件,將請求導向對應的後端服務或伺服器,整個過程中,使用者看到的只有「統一入口」,而非實際承接處理的伺服器架構。
跟 API 路由聽起來很像,是一樣的東西嗎?
一開始我也覺得反向代理 Reverse Proxy 聽起來就像是 API 路由 API Routing,畢竟兩者都會處理請求的分流跟導向,不過處理的層級、應用範圍跟最終目的是不一樣的。
| 分類 | API 路由 | 反向代理 |
| 所在層級 | 應用程式內部(App 層) | 網路層/部署層(如 Nginx) |
| 判斷依據 | URL path、HTTP method | 網域、URL、port、headers 等 |
| 功能重點 | 程式邏輯模組間的導流 | 系統服務層之間的流量轉導 |
| 延伸功能 | RESTful API 控制流程 | SSL 終止、快取、負載平衡、安全防護等 |
簡單來說,API 路由負責應用層的「內部功能切換」,而反向代理負責系統層的「請求統整與流量控管」。
反向路由在哪會用?火車、演唱會搶票!
還是那個熟悉的小北,現在,將這個情境放大十倍、百倍,甚至萬倍,如果最佳客容量 50 人的小北突然擠進 5,000 人甚至 10,000 人,那肯定是通通擠在門口,貨架什麼的根本擠進不去。
在高流量 (使用者請求總量多,例如每秒幾千次請求)、高併發(同一時間內有大量請求發生)
關於高流量 & 高併發還是多補充一下:
高流量:Nintendo Switch 2 發售公告一釋出,Nintendo 官網一小時內湧入 10 萬名用戶瀏覽。 / 整體系統的吞吐量
高併發:Nintendo Switch 2 結帳頁面在 8:00 一開放結帳,兩萬人同時點擊「結帳」。 / 整體系統的瞬間處理能力
在面對流量、穩定性與維運時的種種問題,因而有了反向代理的種種應用方案:
- 負載平衡 Load Balancing:當後端服務架設了多台伺服器處理請求時,反向代理可以依照流量狀況將請求平均分派,避免某台機器超載。
- 靜態內容快取:像圖片、CSS、JS 等靜態資源可以在反向代理這層做快取,加快使用者載入速度,減少伺服器負擔。
- SSL 終止 TLS Termination:反向代理可以集中處理 HTTPS 的加密與解密工作,讓後端服務僅需處理純 HTTP,簡化部署與維護。
- 統一入口 API Gateway :使用者只需要對一個 URL 發出請求,背後實際請求會依路徑或條件分派至不同後端服務,對外呈現的是「單一門戶」。
- 資安防護 :反向代理能配合 WAF(Web Application Firewall)、Rate Limiting、IP 黑名單等機制,加強系統防護能力。
以上種種,可以看出反向代理除了有優秀處理需求的櫃檯的意味,也有實質的系統守門員的功用。
總結
- 正向代理:使用者 → 代理 → 幫使用者存取網站
- 反向代理,使用者 → 代理 → 幫網站分配使用者的需求
- 反客為主、公親變事主。
