正向代理,反向代理
正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
- http正向代理的两种方式:
- 普通模式(RFC 7230 - HTTP/1.1:Message Syntax and Routing)
- 隧道模式(Tunneling TCP basedprotocols through Web proxy servers)
- 隧道代理:也就是透传代理。代理服务器只是在TCP协议上透传HTTPS流量,对于其代理的流量的具体内容不解密不感知。客户端和其访问的目的服务器做直接TLS/SSL交互。
- 中间人(MITM, Man-in-the-Middle)代理:代理服务器解密HTTPS流量,对客户端利用自签名证书完成TLS/SSL握手,对目的服务器端完成正常TLS交互。在客户端-代理-服务器的链路中建立两段TLS/SSL会话。
为什么正向代理处理HTTPS流量需要特殊处理?
- HTTPS流量的认证过程发生在客户端和反向代理服务器之间。
- 而作为正向代理在处理客户端发过来的流量时,HTTP加密封装在了TLS/SSL中,代理服务器无法看到客户端请求URL中想要访问的域名。
反向代理
- 反向代理面对服务端,用户端是无感知的,用户访问最外层的节点,然后转发到真实的服务器。
高度匿名代理
- 服务器根本不知道你使用了代理。在使用高匿代理服务器时,高匿名代理不改变客户机请求,被访问的服务器再看受访者来就像是有个真正的客户浏览器在访问它,此时客户的真实代理IP是隐藏的,服务器端也不会认为我们使用了代理。
REMOTE_ADDR
是服务端根据请求TCP包的ip指定的。假设从client到server中间没有任何代理,那么web服务器就会把client的IP设为IP remote_addr;如果存在代理转发HTTP请求,web服务器会把最后一次代理服务器的IP设置为remote_addr。HTTP_X_FORWARDED_FOR
(XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。如果想要获得最初发起请求的客户端的IP地址的话,那么 X-Forwarded-For 就派上了用场。HTTP_VIA
是一个通用首部,是由代理服务器添加的,适用于正向和反向代理,在请求和响应首部中均可出现。告知目标服务器,请求中使用了代理。REMOTE_ADDR
不可以显式伪造(有兴趣的同学可以了解一下hping3
),它是与服务器建立TCP连接的地址。- 如果HTTP请求没有使用七层代理,则直接读取
REMOTE_ADDR
作为客户端真实ip地址。 - 如果HTTP请求使用了七层代理,比如nginx,就需要设置信任的负载均衡节点转发过来的ip地址。相当于把最外层的
REMOTE_ADDR
逐一传递过来。
TinyProxy
Tinyproxy
是一个轻量级的开源HTTP/HTTPS
代理守护进程,其设计目标是快而小。
1 | User |
总结
- 什么时候用到
Tinyproxy
? - 它的优势安装简单,快速集成,高匿代理。当我们需要请求第三方
API
接口时,为了不暴露服务器的真实ip
地址,就可以引入Tinyproxy
。 - 或者你可以拿来做一个代理的
ip
池,用Python
动态切换ip
抓取一些东西,仅供参考,请谨慎使用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Fairyin的小窝!
评论