# 關于正向代理和反向代理
## 什么是正向代理?
用瀏覽器訪問google時會被block,于是你在香港搭建了一臺代理服務器,讓代理幫助我們請求google.com。
### 流程
1. client訪問代理服務器
* 代理服務器ip
* 代理服務器端口
* 原始服務器域名
2. 代理服務器根據1收到的鏈接與原始服務器通信
3. 服務器返回網頁
4. 代理服務器打包3中的網頁返回client
### 使用場景
國外搭建服務器,位于國內的client通過shadowsock訪問原始服務器。
## 什么是反向代理
### 流程
1. client訪問代理服務器
2. 代理服務器將請求分發到不同的子Server
3. 子Server響應代理服務器
4. 代理服務器響應clinet
### 使用場景
高并發網站使用的負載均衡,撥打10086由不同的客服提供服務
## 總結
正向代理中代理的對象是client,反向代理中代理的是Server

# Server獲取Client的ip
Server通過三個變量獲取Client的ip,REMOTE_ADDR,HTTP_VIA,HTTP_X_FORWARD_FOR。
當client使用正向代理時,這三個變量的值的規則
1. 透明代理
* REMOTE_ADDR = proxy ip
* HTTP_VIA = proxy ip
* HTTP_X_FORWARD_FOR = client ip
2. 匿名代理
* REMOTE_ADDR = proxy ip
* HTTP_VIA = proxy ip
* HTTP_X_FORWARD_FOR = proxy ip
3. 混淆代理
* REMOTE_ADDR = proxy ip
* HTTP_VIA = proxy ip
* HTTP_X_FORWARD_FOR = random ip(隨機)
4. 高級匿名代理
* REMOTE_ADDR = proxy ip
* HTTP_VIA = not datermined
* HTTP_X_FORWARD_FOR = not datermined
## 總結
當server想要獲取client的ip時,根據client是否使用正向代理會得到不同的結果。透明代理時通過HTTP_X_FORWARD_FOR可以獲取客戶端ip,匿名代理時只能獲取代理ip了。