用最通俗易懂方式带你了解-正向代理和反向代理

一、代理是个什么玩意

  生活中,就有许多代理的身份,有时候我们做一些事情不方便的时候,就会叫人帮忙,比如说代购,我去不了香港,不能叫别人帮我买吗,不好意思跟心上人告白,就需要找她闺蜜来间接告白,想买二手车,找不到卖家?来某子二手车直卖网,没有中间商赚差价。事情太多了做不完,把接到的需求分一些给下面的,赋权让手下的兄弟去做

上面的例子,其实都是代理,一个喜欢当中间商的孩子

二、代理的多种身份

一般来说,代理的身份主要有两种,正向代理和反向代理

2.1 正向代理

  面向客户端的代理,怎么是面向客户端呢?就是服务于客户端的,我们主动设置的代理,比较好的例子就是威屁恩了,一般来说,如果我们想访问公司内网或者是外网,一般来说我们的ip会限制非同网段的通信,因为不在同一个网段或者是没有建立对应的网络桥梁 ,就好比说我们没办法直接去香港买东西,就会主动的找代购帮我们买,而且店家也不会管是谁买的,这种行为,更像是我们主动的,而且是可控的,并且对服务端是无感的。

用最通俗易懂方式带你了解-正向代理和反向代理_第1张图片
(图片来源于网络)

2.2 反向代理

  了解了正向代理,反向代理就很明了,就是唱反调的,反向代理是面向服务端的,也就是非客户端主动设置的代理,可以说是我们无感的,最常见的就是使用 nginx 负载均衡,组长一个人活干不过来,就把需求分解成多个小模块,然后叫下属去接手实现,产品才不管是谁做的,反正我是交给组长了,组长你自己做也行,给别人做也行,对我来说是无感的,我只要最后完成的功能,同理,一台机器抗不住这么大的并发,没办法只能叫帮手了,我就当个分配任务的孩子,不是美滋滋嘛,你需求尽管过来,反正代码不是我写。反向代理对客户端来说是无感的,因为它是服务于服务端的。

用最通俗易懂方式带你了解-正向代理和反向代理_第2张图片
(图片来源于网络)

三、代理充当着什么样的角色

经过上面的介绍,你已经大致代理是个什么玩意了,那么代理究竟可以有多大的作用呢

一:匿名访问

二:通过代理上网

三:通过代理缓存,加快上网速度

四:儿童过滤器

五:访问其他网段的网络

  我们说的代理,一般都是需要承担转发请求的任务,因此它也是一个服务器,被称之代理服务器,也是一个中间商,它在服务端和客户端之中,承担着通讯作用,这样可以隐藏服务器的真正位置,当然也可以隐藏客户端的真正身份,代理可以用来监控流量,监控请求,过滤请求,转发请求,有这么一个中间者,你可以发现是可以做许多的事情的

四、如何配置反向代理

  说了这么多概念性的东西,也要说一下业务会用到的东西,威屁恩是没有什么好讲的,而反代的配置,确实我们后端开发必须学会的技能,下面讲两种反代的 nginx 配置,其实一般来说,在同一台机做反代是十分傻白甜的(测试的话就没关系啦)

1. 同一个机器配置配置局部路由反代
server {
       listen       80;
        server_name  www.a.com;

        access_log  /data/logs/nginx/www.a.com.access.log  main;
        error_log    /data/logs/nginx/www.a.com.error.log  error;
        root       /data/projects/www.a.com/public;
        index      index.php index.html index.htm;

       #根据路由来匹配转发
       location /test/ {
             proxy_pass http://www.b.com:8080;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }


   }

server {
        listen       8080;
        server_name  www.b.com;

        access_log  /data/logs/nginx/www.b.com.access.log  main;
        error_log    /data/logs/nginx/www.b.com.error.log  error;
        root       /data/projects/www.b.com/public;
        index      index.php index.html index.htm;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }

   }

2. 不同机器配置局部路由反代
upstream OTHER {
	server xxx.xxx.xxx.xxx:9241;
}
server {
        listen       80;
        server_name  www.a.com;

        access_log  /data/logs/nginx/www.a.com.access.log  main;

        root       /data/projects/www.a.com/public;
        index      index.php index.html index.htm;
	
   	
        location /test/ {
            proxy_pass http://OTHER;
            proxy_ignore_client_abort on;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }

   }

  之所以在同一台机器使用了不同端口的方式进行转发,这是因为同个域名(hosts)在同一个机器是无法同时在两个 vhosts配置文件存在的,会发生域名冲突,因为nginx也不晓得到底哪个vhosts才是你想用的

你可能感兴趣的:(网络)