---
# System prepended metadata

title: Proxy：正向及反向代理

---

Proxy：正向及反向代理
===

因為最近工作上常看到資深同事跟主管，在群裡老是proxy來proxy去的，雖然對這些詞彙早已感到不陌生，但具體要我說出個所以然，還真的有點強人所難。因此，這週日下午花點時間上網認識了關於proxy的一些基本概念，在這邊記錄一下，希望有助於提升自己身為軟體工程師的Common Sense。

共通點
---
在深入理解proxy的知識前，我一直以為proxy講的就是所謂的「反向代理 (reverse proxy) 」，但事實上反向代理只是proxy的其中一個形式，除此之外還有與之相反的「正向代理 (forward proxy) 」。雖然從名稱上來看，這兩者似乎是完全相反的概念，但其實核心的功能十分相似，大致可以區分為下列幾種用途：

1. 提高客戶端訪問資源的速度（緩存靜態資源）。
2. 保護真實的IP資訊。
3. 控制請求訪問的權限。

正向代理
---
而它兩個最大的差異點在於代理方向的不同，正向代理是用於保護、代理客戶端的資訊，使用者在瀏覽器訪問特定網站時，透過代理伺服器一來可以突破某些網路限制（如防火牆、境外資源等等），進而有辦法連到原本無法訪問的資源，二來也可以在訪問時隱藏自己真實的IP以及瀏覽的足跡。

反向代理
---
反向代理的運作方式則是用來服務伺服器端的需求。首先，部署一個反向代理的伺服器作為後端服務的單一入口，可以確保來自客戶端的請求無法取得後端伺服器真實的IP資訊，以避免受到外部的惡意攻擊，其後很重要的是，反向代理在分布式架構中非常好地實現了負載均衡的職責，面對數以億計的大量請求，代理伺服器會適當地將請求分配到後端配置的伺服器叢集，使得每台伺服器都可以獲得合理的工作量，不會造成某台機器過勞死的現象。

總之
---
其他更深入的概念還不算太熟悉，尤其對於實務上該如何配置和部署反向代理伺服器，這點是完全毫無著墨，期待不久後可以透過Side Project來實作。