为什么需要proxy server?
监控,内容过滤
- 公司的proxy server可以清楚的知道,你的流量要访问什么网站。proxy server可以禁掉一些网址,或者redirect到一些提示页面。
- 公司的proxy server可以监控你每天都在访问什么网站,花了多长时间。
节约带宽,节省成本
- 在proxy server上会有一些cache,里面存放了最近访问的website的数据,如果有1000个request通过同一个proxy server访问website A,这时如果proxy server上有website A的最新数据在cache里,就可以直接返回给这1000个client。如果proxy server上没有,也只需要发一个website A的请求,然后把返回数据放在cache里。
提高性能
- 通过代理服务器的缓存(比如 CDN)和负载均衡(比如 nginx lb)功能,服务器端可以加速请求的访问,在更快的时间内返回结果)
安全和隐私
有一些proxy server可以隐藏掉client的IP等个人信息,这样通过proxy访问网站,web server并不能知道是谁在真正的访问它。
公司可以在内网和外网之间通过代理进行转发,这样不仅对外隐藏了实现的细节,而且可以在代理层对爬虫、病毒性请求进行过滤,保护内部服务。
还可以加密数据
风险:
因为所有client的请求都要通过proxy server访问internet,所以有数据泄露的风险。也有一些技术可以实现数据加密,规避这种risk,后面会讲到。
代理服务器的分类:
按照匿名功能分类(是否具有隐藏IP的功能)
非匿名(和透明代理的区别???)
匿名:使用此种代理时,虽然被访问的网站不能知道你的 IP 地址,但仍然可 以知道你在使用代理,有些侦测 IP 的网页也仍然可以查到你的 IP。
高度匿名:使用此种代理时,被访问的网站不知道你的 IP 地址,也不知道你在使用代理进行访问。此种代理的隐藏 IP 地址的功能最强。
透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的 request fields(报文),并会传送真实 IP。web server会直接获得client的IP,并且知道client是通过proxy访问的它。
按代理服务器的用途分类
- HTTP代理
- SSL代理
- HTTP CONNECT代理
- FTP代理
- POP3代理
- Telnet代理
- Socks代理
- 等等等等
按照相对于client-server的角色分类
正向代理
代理对客户端不是透明的,客户端需要知道代理的地址并且手动配置。配置了代理,浏览器在发送请求的时候会对报文做特殊的修改。
反向代理
说客户端一般不知道代理的存在,认为自己是直接和服务器通信。我们大部分访问的网站就是反向代理服务器,反向代理服务器会转发到真正的服务器,一般在反向代理这一层实现负载均衡和高可用的功能。而且这里也可以看到,客户端是不会知道真正服务器端的 ip 地址和端口的,这在一定程度上起到了安全保护的作用。
代理具体做什么?
1 | - 修改 HTTP 请求:url、header、body |
普通代理
隧道代理