传说中的代理服务技术是一门很古老的技术,互联网早期就已经出现,一般来说,实现实现代理技术的实现就是在服务器上安装代理软件,成为代理服务器,从而配置\实现代理技术。
其实网络代理的玩法真的很多。之前知道如何使用,今天我们看看代理背后的故事。
我们以nginx为例,常用的代理技术有:正向代理、反向代理和透明代理。真正项目中常用的是反向代理和正向代理,透明代理我们了解一下就可以,本文重点讲正向代理和反向代理。
老规矩,走一波概念:
1.正向代理
正向代理(forward proxy):是一个位于客户端(用户A)和原始服务器(origin server)(目标服务器)之间的服务器(代理服务器),为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的配置才能使用正向代理。一般情况下,如果没有特别说明,代理技术默认是指正向代理技术。
从上面的概念中,我们可以知道,所谓的正向代理,就是代理服务器替代客户端(用户A),来访问原始服务器(目标服务器)。
举个例子:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
还不懂?看下图:
正向代理的作用:
1:访问本来无法访问的资源
我们抛除复杂的网络路由情节来看图,图中路由器从左到右为R1,R2假设最初用户A要访问目标服务器需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问目标服务器了。但是如果用户A让代理服务器去代替自己访问目标服务器,由于代理服务器没有在路由器R1或R2节点中,而是通过其它的路由节点访问目标服务器,那么用户A就可以得到目标服务器的数据了。现实中的例子就是“翻墙”。不过自从VPN技术被广泛应用外,“翻墙”不但使用了传统的正向代理技术,有的还使用了VPN技术。
2:可以做缓存,加速访问资源
主要是提高代理服务器的宽带流量,目前不流行了。
Cache(缓存)技术和代理服务技术是紧密联系的(不光是正向代理,反向代理也使用了Cache(缓存)技术。还如上图所示,如果在用户A访问目标服务器某数据之前,已经有人通过代理服务器访问过目标服务器上得数据,那么代理服务器会把数据保存一段时间,如果有人正好取该数据,那么代理服务器不再访问目标服务器,而把缓存的数据直接发给用户A。这一技术在Cache中术语就叫Cache命中。如果有更多的像用户A的用户来访问代理服务器,那么这些用户都可以直接从代理服务器中取得数据,而不用千里迢迢的去目标服务器下载数据了。
3:对客户端访问授权,上网进行认证
防火墙作为网关,用来过滤外网对其的访问。假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(这个在代理服务器上做限制)这样用户A因为授权,可以通过代理服务器访问到目标服务器,而用户B因为没有被代理服务器授权,所以访问目标服务器时,数据包会被直接丢弃。
4:代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
目标服务器并不知道访问自己的实际是用户A,因为代理服务器代替用户A去直接与目标服务器进行交互。如果代理服务器被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼
2.反向代理
反向代理(reverse proxy):和正向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
反向代理的作用:
1:保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
(大型网站,通常将反向代理作为公网访问地址,Web服务器是内网)
用户A始终认为它访问的是目标服务器而不是代理服务器,但实用际上反向代理服务器接受用户A的应答,从目标服务器中取得用户A的需求资源,然后发送给用户A。由于防火墙的作用,只允许代理服务器访问目标服务器。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了目标服务器,但用户A并不知情。
2:负载均衡,通过反向代理服务器来优化网站的负载
当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问目标服务器的时候,让不同的代理服务器去应答不同的用户,然后发送不同用户需要的资源。
3.透明代理
透明代理:透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。 透明代理实践的例子就是时下很多公司使用的行为管理软件
4.nginx如何配置正向代理和反向代理
直接上代码,纯干货,你值得收藏。
正向代理
- server{
- resolver 10.1.23.4;
- resolver_timeout 30s;
- listen 8888;
- location / {
- proxy_pass http://$http_host$request_uri;
- proxy_set_header Host $http_host;
- proxy_buffers 256 4k;
- proxy_max_temp_file_size 0;
- proxy_connect_timeout 30;
- proxy_cache_valid 200 302 10m;
- proxy_cache_valid 301 1h;
- proxy_cache_valid any 1m;
- }
- }