正向代理 反向代理
正向代理
通俗地讲
客户端 A 想要访问 服务端 B,但是因为某些原因客户端不想让服务端知道请求是他发送的。因此客户端 A 先将请求发给代理服务器 C,委托代理服务器 C 去访问服务端 B,服务端 B 将结果返回给代理服务器 C,C 将结果返回给 A。这种情况称之为正向代理。
因为请求是客户端委托代理服务器发的,因此服务端只知道请求的直接发送方(即代理服务器),并不知道或者说并不关心是哪个客户端委托的。
因此,一般来说,在正向代理中,客户端的 IP 对于服务端来说是隐藏的。
正向代理的作用
(1)权限
比如客户端 A 没有权限访问服务端 B,但是代理服务器 C 有权限,客户端 A 访问服务端 B 会被阻拦,因此客户端 A 就灵机一动,我以代理服务器 C 的身份去访问,服务端不就会同意了?
(2)加速
比如客户端 A 访问服务端 B 速度很慢,但是代理服务器 C 不会。因此客户端 A 就灵机二动,我以代理服务器 C 的身份去访问,不就会很快?这也是游戏中加加速器的基本原理。
(3)缓存
比如客户端 A 访问服务端 B,中间经过了代理服务器 C,以后客户端 D E F 等如果访问同样的数据时,由于代理服务器上有缓存,就可以直接返回该资源。
(4)隐藏客户端身份(比如你想干见不得人的事情):这个通过上面的描述就可以看出来了。
总的来说,正向代理是对客户端负责的。
反向代理
通俗地讲
客户端 A 想要访问 服务端 B,但是因为某些原因不想让客户端能直接访问到服务端,所以客户端 A 先把请求发给可以直接访问到服务端的代理服务器 C,代理服务器随后访问服务端拿到资源并返回给客户端。这种情况称之为反向代理。
因为客户端不能直接访问服务端,只能通过代理服务器去访问。
所以,一般来说,在反向代理中,服务端的 IP 对于客户端来说是隐藏的。
反向代理的作用
(1)保护服务器的安全
只让代理服务器访问,不让客户端直接访问,能在一定程度上保护服务器的安全。比如恶意攻击者会利用客户端直接攻击服务器,譬如 XSS 攻击等。
(2)负载均衡
负载均衡:首先,有很多服务器组成一个服务器集群,当用户访问网站的时候,先访问一个中间代理的服务器,再让这个中间代理的服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入选择的服务器,这种行为称之为负载均衡。
比如现在有多个客户端在发送请求,代理服务器可以根据一定的算法,对这些请求分发给不同的服务器,以达到负载均衡的目的。
常见算法如下
(1)轮询
请求按照时间顺序被分配到不同的服务器,适用于服务器配置相当的情况。
(2)权重轮询
如果服务器性能存在差异,可以通过配置权重,让服务器的性能得到充分发挥。权重和访问比率成正比,权重越高,被访问的概率越大。
(3)ip_hash
若用户已访问了某个服务器,再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。(如果在服务器 A 登录,下次又被服务器 B 处理请求时,登录状态不能共享,因此采用此方法最佳)
因此,用户每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
总的来说,反向代理是对服务端负责的。