当前位置: 首页 > 科技观察

你还不知道“正向代理”和“反向代理”的区别吗?

时间:2023-03-12 21:45:45 科技观察

我老板看完这篇文章的评价是:文笔不错,句子流畅,排版也还行,就是不清楚什么是反向代理。所以我尝试向非IT工作者解释“正向代理”和“反向代理”。接下来,我将尝试先向大众解释一下“代理”的概念,然后再从专业的角度解释一下“正向代理”和“反向代理”。概念实例化在讲代理的概念之前,先说一个类比,也是我跟老板解释的过程:幸好我脑子够快,不然这个月的零用钱会堵死我。但我该如何解释呢?对于没有编程语言基础的人来说,看不懂真是伤脑筋!正在胡思乱想的时候,她突然问我晚上吃饭了吗?这不是一个很好的例子吗?解释了这么久,也不知道是我真的听懂了,还是我太困了。但是我有钱吃肉。接下来,我们就认真看看“正向代理”和“反向代理”。正向代理和反向代理的概念先看说明图,先有个整体的认识:正向代理(ForwardProxy):是位于客户端和原服务器之间的服务器。客户端为了从原始服务器获取内容,客户端向代理发送请求并指定目标(原始服务器),然后代理将请求转发给原始服务器,并将获得的内容返回给客户端。客户端可以使用正向代理。反向代理(ReverseProxy):是指使用代理服务器接受Internet上的连接请求,然后将请求转发给内网的服务器,并将从服务器得到的结果返回给请求连接的客户端互联网。此时代理服务器对外充当反向代理服务器。下面我细化一下它们各自的特点:正向代理:代理客户。隐藏真正的客户端,为客户端发送和接收请求,让真正的客户端对服务器不可见。LAN中的所有用户都可以由负责HTTP请求的服务器转发代理。表示与服务器通信的是正向代理服务器。反向代理:代理服务器。真实服务器是隐藏的,为服务器发送和接收请求,使真实服务器对客户端不可见。负载平衡服务器将用户请求分配给空闲服务器。表示用户直接与负载均衡服务器通信,即用户在解析服务器域名时获取负载均衡服务器的IP。它们的共同点:都是作为服务端和客户端之间的中间层。两者都可以增强内网的安全性,防止Web攻击。两者都可以作为缓存机制来提高访问速度。区别:正向代理实际上是客户端的代理,反向代理是服务端的代理。在正向代理中,服务器不知道真正的客户端是谁;而在反向代理中,客户端并不知道真正的服务器是谁。效果不同。正向代理主要用于解决访问限制问题;而反向代理则是提供负载均衡、安全保护等功能。说了这么多,下面来说说agent在工作中的定时应用场景。上网软件实战:转发代理我们知道在国内访问www.google.com是无法访问的,因为正常情况下访问会被GFW限制。但是如果你还想用谷歌上网,我们就需要一些代理来帮助我们请求www.google.com,代理会将响应结果返回给你。GFW的作用主要是分析和过滤中国境内外网络之间的相互访问。也就是说,他不仅可以限制国内网民访问某些海外站点,还可以限制国外用户访问国内站点。我们通常所说的“被墙”是指访问受到了防火墙的限制。顾名思义,就是突破禁制。Nginx服务器:反向代理Nginx服务器有很多功能,比如反向代理、负载均衡、静态资源服务器等,客户端可以直接通过HTTP协议访问服务器,但是我们可以在中间加一个Nginx服务器,客户端请求Nginx服务器,Nginx服务器请求应用服务器,然后将结果返回给客户端。此时的Nginx服务器就是一个反向代理服务器。在虚拟主机配置中配置反向代理:#虚拟主机配置server{listen8080;#监听端口server_name192.168.1.1;#配置访问域名root/data/toor;#站点根目录error_page502404/page/404。html;#错误页面位置^~/api/{#使用/api/proxy_pass的值proxy_passhttp://192.168.20.1:8080;#代理应用服务器的HTTP地址}}以上简单的配置就可以实现反向了代理的功能。当然,反向代理也可以处理跨域问题。使用vue-cli搭建的项目,我们知道vue-cli使用http-proxy-middleware插件进行代理服务器等配置。所以我们可以使用proxyTable来设置地址映射表。即使用proxyTable属性进行相关配置,解决跨域问题带来的困扰。配置如下:proxyTable:{'/weixin':{target:'http://192.168.20.1:8080/',//接口的域名secure:false,//如果是https接口,这个参数需要配置changeOrigin:true,//如果接口是跨域的,需要配置这个参数pathRewrite:{'^/weixin':''}}}负载均衡配置:#upstream表示负载服务器池,定义名称为myupstreammy{server192.168.2.1:8080weight=1max_fails=2fail_timeout=30s;server192.168.2.2:8080weight=1max_fails=2fail_timeout=30s;server192.168.2.3:8080weight=1max_fails=2fail_timeout=30s;server192.168.2.4:8080weight=12max0_ailfail#即30s内两次尝试均失败,则认为主机不可用}负载均衡就是将请求/数据轮询分发到多台服务器上执行。负载均衡的关键是一致性。也可以使用ip-hash,根据客户端IP地址的Hash值,将请求分配给固定的服务器处理。另外,服务器的硬件配置可能不同,配置的服务器可以处理更多的请求,可以通过权重参数来控制。