# 关于正向代理和反向代理
## 什么是正向代理?
用浏览器访问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
![](https://box.kancloud.cn/534288412fb3931f2b9daa8daeae7511_520x670.png)
# 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了。