1.正向代理和反向代理的区别1.1什么是代理服务器?所谓代理服务器就是位于请求客户端和原始服务器之间的跳板服务器。正向代理可以隐藏客户端,反向代理可以隐藏原始服务器。上面的描述不是很清楚,接下来我们就来了解下正向代理和反向代理的区别1.2正向代理的概念正向代理,也就是传说中的代理,它的工作原理就像一个跳板,简单的说,我是用户,不能访问某个网站,但是可以访问代理服务器。这个代理服务器呢,他可以访问我不能访问的网站,所以我先连接代理服务器,告诉他我需要那个网站的内容无法访问,代理服务器去取,返回它给我。从网站的角度来看,代理服务器抓取内容时只有一条记录。有时不知道是用户的请求,用户的信息也被隐藏起来,这要看代理是否告知网站。结论是:正向代理:客户端<1>代理一>服务器正向代理是位于客户端和原服务器(originserver)之间的服务器,为了从原服务器获取内容,客户端发送一个请求是制作并指定目标(源服务器),代理将请求转发给源服务器,并将获取的内容返回给客户端。1.3反向代理的概念例如:用户访问http://www.test.com/readme,但是www.test.com上不存在readme资源,偷偷从另一台服务器上获取,然后作为传输内容在用户不知情的情况下返回给用户。这里提到的域名www.test.com对应的服务器设置为反向代理功能。结论是:client1>proxy<1>serverreverseproxy正好相反,对于client来说就像是原来的server,client不需要做任何特殊的设置。客户端向反向代理命名空间(name-space)中的内容发送一个正常的请求,然后反向代理会判断将请求转发到哪里(originserver),并将获取到的内容返回给客户端,就像这些内容原来一样它是它自己的。网友贴图,加深理解1.4两者的区别在用途上:正向代理的典型用途是为防火墙内的局域网客户端提供一种访问互联网的途径。转发代理还可以使用缓冲功能来减少网络使用。反向代理的典型用途是从防火墙后面的服务器向Internet用户提供访问权限。反向代理还可以为后端的多台服务器提供负载均衡,或者为后端较慢的服务器提供缓冲服务。此外,反向代理还可以启用先进的URL策略和管理技术,使不同Web服务器系统中的网页可以同时存在于同一个URL空间下。在安全方面:正向代理允许客户端通过它访问任何网站,从而访问客户端本身,因此您必须采取安全措施以确保为授权客户端提供服务。反向代理对外是透明的,访问者不知道访问的是代理。总结:开启反向代理应用:Nginx和Nat123。Nginx是纯反向代理,需要搭建发现代理服务才能使用,效果高。nat123是NAT和反向代理结合的应用,可以直接使用,解决80端口等问题,速度快。二、Nginx正向代理和反向代理实战2.1正向代理配置场景演示正向代理很常见,我们正常上网就是一种正向代理。下面我们演示一个正向代理的场景:首先在服务器A(IP:192.168.1.110)的Nginx上设置访问控制,在访问控制前访问A下的test.html如下:在服务器A的Nginx中修改配置文件,添加判断语句,如果访问A的IP不是192.168.1.44(B服务器IP),返回403.location/{if($remote_addr!~*"^192\.168\.1\.44"){return403;}roothtml;index.htmlindex.htm;}添加后,重新加载nginx,然后访问test.html,如下:此时服务器A上的本地浏览器被限制,无法访问该资源。接下来修改服务器B上的Nginx配置文件,添加resolver和proxy_pass,设置如下:server{listen8080;server_namelocalhost;resolver8.8.8.8;location/{proxy_passhttp://$http_host$request_uri;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}}resolver是DNS解析,这里填写的IP是谷歌提供的免费DNS服务器的IP地址proxy_passConfiguringproxyforwarding这里是配置B服务器所有访问根级别的请求都被proxy转发到$http_host$request_uri,$http_host是我们要访问的主机名,$request_uri是我们后面添加的参数。简单点说,相当于配置我们的请求给B服务器,B服务器再请求我们请求的地址。那么我们来看看结果吧。我们已经在本地配置了代理。我这里是mac系统。您可以从网络设置中选择高级,然后选择代理。(这里代理是在服务器A上配置的。)结果证明,此时服务器A上的客户端可以成功访问到服务器A的资源。以上是正向代理的场景演示。在这个过程中,我们可以知道我们的client想要A的资源,但是只有B可以得到A的资源,所以让B代理帮我们访问A的资源。整个过程中,A只知道B拿走了它的资源,不知道client拿走了。2.2反向代理配置场景演示反向代理的演示比较简单。首先我们创建一个test.conf配置文件,启动这个配置文件对应的服务:server{listen8080;server_namelocalhost;location/{roothtml;indexindex.htmlindex.htm;}error_page500502503504404/50x.html;location=/50x.html{root/usr/share/nginx/html;}}可以看到服务器中的监听端口是8080,这里假设我的服务器本身没有对外开放8080端口,只开放了80端口。所以此时访问test.html的结果是访问不到的。修改Nginx默认配置文件,添加proxy_pass,设置如下:server{listen80;server_namelocalhost;location/{roothtml;index.htmlindex.htm;}#设置代理位置~/test.html${proxy_passhttp://127.0.0.1:8080;}error_page500502503504404/50x.html;location=/50x.html{root/usr/share/nginx/html;}}现在可以访问8080端口配置资源如下:反向代理演示以上已经完成。在这个过程中,我们可以知道客户端要访问的是test.html,但是test.html其实是配置在8080端口下的,通过Agents就可以获取到。也就是说,中间经过了哪些代理过程,客户端并不知道,只有服务器知道。客户端只知道他拿到了test.html,也就是配置在8080端口下的资源。三、小结经过正向代理和反向代理的概念理解和区别,以及Nginx下的演示操作,相信大家可以深刻理解正向代理和反向代理的区别,Nginx配置下代理的简单性。正向代理和反向代理的区别在于代理对象不同。正向代理的代理对象是客户端,反向代理的代理对象是服务器。总结一下:站在客户端的代理服务器是正向代理,站在服务器端的代理服务器是反向代理。Nginx可以通过proxy_pass设置代理服务。
