# Proxy 代理,就是透過代理伺服器代替客戶端去訪問目標伺服器。而代理又分為正向代理和反向代理 <!-- more --> ## Forward Proxy(正向代理) 客戶端透過代理伺服器去訪問應用端的目標伺服器 ![Forward Proxy](https://hide-ip-proxy.com/wp-content/uploads/2018/04/what-is-proxy-server.png) 用途 : * 突破訪問限制 常見如公司內部網路無法對外連線,而特殊需求的員工則可透過設定 Proxy 的方式連到外部網路 * 提高訪問速度 代理伺服器通常硬碟 buffer 都較大,會將部分 Response 存在 buffer,當有人再次透過 Proxy 訪問相同的訊息時,可以直接回傳給客戶端 * 隱藏客戶端真實IP 因為是透過代理伺服器,所以客戶端的IP並不會暴露讓外部知道 流程 : 1. 客戶端要訪問目標伺服器,先發送Request給代理伺服器,並且指定目標 2. 代理伺服器收到Request後會轉送Request給目標伺服器 3. 目標伺服器將Reponse回傳給代理伺服器 4. 代理伺服器再將Reponse回傳給客戶端 ## Reverse Proxy(反向代理) 應用端透過代理伺服器接收 Request,代理伺服器再將 Request 轉送給應用端內部的伺服器,並透過反向代理伺服器做負載平衡和安全性防護 ![Reverse Proxy](https://www.sidneyw.com/static/0f48c171968c9a9521b247a764099dc1/e64cf/proxy.png) 用途 : * 隱藏伺服器真實 IP 客戶端無法得知應用端真實伺服器的 IP * 負載均衡(load balance) 反向代理伺服器可以做負載均衡,根據所有真實伺服器的負載情況將客戶端分配到不同的真實伺服器 * 提高訪問速度 如同正向代理會在 buffer 儲存部分 Reponse 訊息可以直接回傳 * 提升安全性 > 反向代理伺服器可做為應用層的防火牆,替網站檔下基本的網頁攻擊(DOS、DDOS),也可替後端伺服器統一提供加密和 SSL、提供 Http 訪問認證等 流程 : 1. 客戶端要訪問目標伺服器,先發送 Request 給反向代理伺服器 2. 反向代理伺服器收到 Request 後會轉送 Request 給內部網路的伺服器,此時反向代理伺服器會依照各伺服器的負載量去決定該傳送 Request 給哪個伺服器,以達到負載均衡(前提是該應用有部署在多台伺服器上) 4. 內部伺服器將 Reponse 回傳給反向代理伺服器 5. 反向代理伺服器再將 Reponse 回傳給客戶端 ## Summary | | 正向代理 | 反向代理 | |:--------:|:--------:|:------------:| | 代理目標 | 客戶端 | 應用端的伺服器 | | 架設方 | 客戶端 | 應用端 | | 影響 | 目標伺服器不知道客戶端是誰 | 客戶端不知道真正的目標伺服器是誰 | | 用途 | 解決訪問限制 | 負載均衡、安全防護 | ## 參考 [1] [終於有人把正向代理和反向代理解釋的明明白白了](https://kknews.cc/zh-tw/tech/k66p2gb.html) ###### tags: `Server` `伺服器` `Proxy`