不请自答,实在是看不下去一群不理解的人对某些答案抄来抄去,进而安慰自己已经理解,已经很牛逼的人。
曾经跟提问者一样,面对正向和反向代理代理很迷惑,怎么看都看不出他们之间的区别,上网搜各种资料,全部都是某个答案的摘抄版。我想说,尼玛,你们真的明白吗?
之后还是求助于维基百科,上面有一段话:
目录
Reverse proxy
From Wikipedia, the free encyclopedia
A reverse proxy taking requests from the Internet and forwarding them to servers in an internal network. Those making requests to the proxy may not be aware of the internal network.In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client, appearing as if they originated from the proxy server itself.[1] Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client.Quite often, popular web servers use reverse-proxying functionality, shielding application frameworks of weaker HTTP capabilities.
重点是这句:
Unlike a forward proxy, which is an intermediary for its associated clients to contact any server, a reverse proxy is an intermediary for its associated servers to be contacted by any client。
翻译:正向代理是客户端和其他所有服务器(重点:所有)的代理者,而反向代理是客户端和所要代理的服务器之间的代理。
举例:
一般的正向代理,比如翻墙,任何可以连接到该代理服务器的软件,就可以通过代理访问任何的其他服务器,然后把数据返回给客户端,这里代理服务器只对客户端负责。而反向代理的话,如果他反向代理了两个服务,那么之后客户端访问这两个服务器的时候,该代理服务器才会给它代理,也就是说,这里的代理服务器只对该代理服务器所代理的服务器负责。这也就是为啥要起这样的名字。
总结:一个对客户端负责,一个对所代理的服务器负责。一个正,一个反。
专治不服
over
摘要:本篇文章从代理的讲解开始,到正向代理,最后再进行讲解反向代理,阅读全文可以解决你的疑惑哦代理
什么是代理
代理也被叫做网络代理,是一种比较特殊的网络服务,允许一个终端(通常指客户端)通过这个服务与另一个终端(通常指服务器端)进行非直接的连接。
例如:一些网关、路由器等网络设备都具备网络代理的功能。
代理服务有利于保障网络终端的隐私或者安全,可以在一定程度上阻止网络攻击(因为通过代理,可以隐藏真正的服务器端/客户端)
代理服务器
左边和右边的电脑在通讯时候,需要经过中间的电脑中转,而中间的那部电脑就是代理服务器。
代理请求过程
客户端首先根据代理服务器所使用的代理协议,与代理服务器创建连接,接着按照协议请求对目标服务器创建连接、或者获得目标服务器的指定资源(如:文件)。
代理协议
此处的协议指的是网络传输协议。主要是两种:
SocksHTTP网络传输协议在本篇就不做过多介绍。
正向代理
通常我们说的代理,都是指的正向代理。
继续看这张图,你会发现,此处的代理服务器可以由客户端提供,也可以由服务器端提供。
当客户端主动使用代理服务器时,此时的代理叫正向代理。比如:一些网络代理工具(加速器/VPN…)
正向代理完整流程
正向代理时,由客户端发送对某一个目标服务器的请求,代理服务器在中间将请求转发给该目标服务器,目标服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。
使用正向代理时,客户端是需要配置代理服务的地址、端口、账号密码(如有)等才可使用的。
通过上图可以看到,客户端并没有直接与服务器相连。正向代理隐藏了真实的客户端地址。可以很好地保护客户端的安全性。
正向代理的适用场景
访问被禁止的资源(让客户端访问原本不能访问的服务器。可能是由于路由的原因,或者策略配置的原因,客户端不能直接访问某些服务器。为了访问这些服务器,可通过代理服务器来访问)突破网络审查(比如谷歌、youtube…)再比如客户端IP被服务器封禁,可以绕过IP封禁也可以突破网站的区域限制隐藏客户端的地址(对于被请求的服务器而言,代理服务器代表了客户端,所以在服务器或者网络拓扑上,看不到原始客户端)进行客户访问控制可以集中部署策略,控制客户端的访问行为(访问认证等)记录用户访问记录(上网行为管理)内部资源的控制(公司、教育网等)加速访问资源使用缓冲特性减少网络使用率(代理服务器设置一个较大的缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。)过滤内容(可以通过代理服务器统一过滤一些危险的指令/统一加密一些内容、防御代理服务器两端的一些攻击性行为)反向代理
服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知代理服务器的IP地址,而不知道在代理服务器后面的服务器集群的存在。
反向代理整个流程:由客户端发起对代理服务器的请求,代理服务器在中间将请求转发给某一个服务器,服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。
反向代理的适用场景
负载均衡如果服务器集群中有负荷较高者,反向代理通过URL重写,根据连线请求从负荷较低者获取与所需相同的资源或备援。可以有效降低服务器压力,增加服务器稳定性提升服务器安全性可以对客户端隐藏服务器的IP地址也可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等加密/SSL加速:将SSL加密工作交由配备了SSL硬件加速器的反向代理来完成提供缓存服务,加速客户端访问对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务数据统一压缩节约带宽为网络带宽不好的网络提供服务统一的访问权限控制统一的访问控制突破互联网的封锁突破谷歌访问封锁也就是说,不需要客户端进行代理,我们通过谷歌代理网站(该代理服务器可以访问谷歌,而我们可以访问该公开的代理服务器),也可以突破封锁。为在私有网络下(如局域网)的服务器集群提供NAT穿透及外网发布服务上传下载减速控制正向代理与反向代理的区别
当前面的内容理解后,对于正向代理和反向代理的区别就很好理解了。
最核心的不同在于代理的对象不同。
正向代理是代理客户端。反向代理是代理服务器。而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端。
也就是说:
正向代理隐藏真实客户端反向代理隐藏真实服务端反向代理为什么叫反向代理
从我们用户的角度来看:代理我们发出请求的客户端被称为正向代理。而代理我们访问的服务器,则被称为反向代理。
从代理结构的角度来看(代理服务器在两种代理中的作用均为收发请求与响应):
客户端与代理服务器属于一个局域网(看图左边),称为正向代理。
服务器端与代理服务器属于一个局域网时(看图右边),称为反向代理。
总结
最后,请记住:
正向代理为客户端服务。反向代理为服务器端服务。本文分享自华为云社区《10分钟完全理解代理、正向代理、反向代理》,作者:谙忆。点击关注,第一时间了解华为云新鲜技术~
引言
面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确实了解了。
接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在一面问完了,这一面只围绕分布式系统相关的网络概念,从最基本的代理开始。
1、面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的?
问题分析: 即使作为业务开发人员也会经常遇到需要配置Nginx或其他负载均衡的问题,比如你做了一个文件上传服务,上线后发现文件被拦截了,看看报错信息一看是被Nginx 代理拦截了,Nginx限制了文件大小,这个时候代理的概念是啥怎么看明白这个问题呢?
答:
正向代理: 代理用户端请求服务端,相对于服务器用户端是匿名的,比如单位内网使用了正向代理软件,所有员工都访问百度,但是百度看到的只有一个IP地址,百度也不知道到底是哪个员工访问的。
反向代理: 代理服务端提供服务,相对于用户服务端是匿名的,同样是访问www.baidu.com,所有用户输入的都是一个网站或者一个IP,但是百度背后有成千上万的服务器,你也不知道你访问的是哪一个。
2、面试官:那服务端为什么要使用代理?有啥好处?
问题分析: 面试官点点头,对我理解的代理表示认可,随后问我使用代理有什么用,考察代理技术的原理。
答:比如用 Nginx 做代理,这样就可以开buffer,Nginx 可以把 Request 请求和 Response 在读取完整之前 buffer 住,好比饭店服务员,所有顾客要什么菜和一个服务员说一下就行了,不会直接找厨师,一个服务员接待10个顾客,最后把点的20道菜分发给5个厨子做就行了,厨子好比服务器,这样厨子就可以专心做菜了,接待这种事就有Nginx代理做,同时,还可以根据顾客数量多增加或者减少厨师数量,把任务均匀分给每个厨师,这就是负载均衡的作用,Nginx 就可以有效分发流量。
总的来说:
让IO和服务器分离,突破IO性能,提高服务器吞吐能力。
控制流量分发,管理服务集群,起到负载均衡作用。
安全性和匿名性:通过拦截前端服务器的请求,反向代理服务器可以保护其身份,并可以抵御安全攻击。它还确保可以从单个记录定位器或URL访问多个服务器,而不管服务端网络的结构如何。
3、面试官:那你知道哪些负载均衡算法?
问题分析: 聊到了负载面试官要继续深挖算法了。
答:
轮询算法:简单的理解就好比性感荷官在线发牌,从左到右依次发牌,最后每个人获得的纸牌张数一样,轮询算法就是将多个用户请求按顺序依次分发到1-10号机器上,目的就是让每台机器承受相同的压力,100W次查询理论上每台机器分摊了10W次查询。
加权轮询算法:轮询算法和加权轮询算法有什么区别?想象一下,如果10台服务器的配置不相同,8台机器是8核32G,剩下两台是4核16G,如果按照算法1轮询,每台机器分担10W次请求,那两台低配的服务器说我扛不住呀,你们配置比我好,这不公平,我要宕机休息一下,加权轮询算法就是为了应对这种情况,设置不同机器的权重不同,10台同配置机器分别均摊10%的流量,如果机器性能不同,那让两台低配的权重降低,只承担5%的流量,这样就公平了,能者多劳。每台机器都不闲着发挥自己最大的性能。
随机算法:随机算法和轮询算法类似,让所有请求随机分配到不同的机器上,请求越多最后分散在每台机器上的请求数约接近相等。
加权随机算法:和加权轮询算法道理相似,这里不多说了。
最小连接数算法:最小链接数就是请求分发以前,先看当前10台机器谁最清闲,谁当前处理的链接数最少那就把活分给谁,最后的分工也相对公平。
Hash 算法:前5种算法有一个问题,就是同一个用户的请求多次,可能每次都会被分配到不同机器上,这样有什么不好?如果服务器缓存了用户 Session,那每次请求不同服务器都需要保存用户的 Session,最坏的结果就是用户请求10次,10台服务器都缓存了同一个用户的 Session,这显然是浪费服务器资源。这个时候 Hash 算法就出现了,如果读者还不知道 Hash,建议先 Google 下 Hash,hash(client:ip) % N,N就是服务器的数量,只要用户的 IP不变,最后 Hash 取余的结果就不会变,这样就能保证同一个用户每次请求都会在同一台机器上,这里的IP还可以是用户的其他唯一ID。
一致性Hash:hash(client:ip) % N 上面的公式中如果N变了怎么办?比如一台服务器断电了,那最后 Hash 取余的结果就全变了,所有用户会被分配到哪台机器需要全部重新计算,这对有 Session 状态的服务就是一场灾难,一致性Hash 就是为了解决这个问题。
深入分析
负载均衡几乎是各大互联网公司搭建系统必用的技术了,也会有初学者学习分布式系统时会问我,什么是负载均衡,为什么要使用负载均衡,多加一层负载均衡会让服务调用变慢吗?带着这些问题学习一下这一章。
先看下没有负载均衡的网站架构
不知道你有没有发现,如果服务端是单台服务器,直接通过网络就可以链接。为什么说负载均衡几乎是各大互联网公司搭建系统必用的技术,除了个人网站,比如我的博客还是单体服务器以外,相信没有哪家互联网公司的服务敢这样,一台机器如果宕机怎么办?让用户等一会儿吗?那估计这家公司离倒闭就不远了。
那怎么解决单机故障的问题,再看下面的图。
可以看出,多台服务器的情况,增加了一层负载均衡。
什么是负载均衡
负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个伺服器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。
——— 维基百科
简单地理解负载均衡的作用就是流量分发,将大量用户请求分发到不同服务器上分担压力,如果有机器宕机,负载均衡服务器会负责把故障机器自动摘除。
一个框架能存活下来一定是具有自己的优点,没有最好,适合自己的就是最好的。
比如F5,性能出色价格昂贵而出名,从十几万到上百万不等,有强大的售后和技术支持,我工作多年只有工作第一年参加国家电网项目上使用过F5,当时还给了我们一台测试用的机器,后来辞职后面试别的公司,面试官问我以前的项目组是使用的什么负载均衡,我说F5,面试官感叹国家队果然财大气粗,我那个时候不了解还有什么其他解决方案,表示F5很奇怪吗?面试完回家才慢慢了解,原来有很多解决方案,阿里使用LVS,也使用Nginx,美团最初使用Nginx + LVS,以及后来独立研发的MGW。
有人会问,怎么一个负载均衡就这么多种算法,心好累,企业开发里能用这么多算法吗?真正到企业开发中,一般都只用一种,如果负责的服务器没有带状态的 Session,也不存在机器配置不相同的情况,那就可以用轮询或随机算法,工程师根据实际情况选择最合适自己的算法。
正向代理&反向代理
正向代理
生活中的正向代理,打个比方,你想去俄罗斯旅行,需要去使馆办理签证,手续麻烦,你完全不知道从何下手,这个时候你想到找旅行社,有专门的导游可你帮你代办,你只需提供资料就在家等着拿签证就可以了,你是客户端,俄罗斯使馆是服务端,导游就是代理端。
正向代理就是代理客户端,服务端不知道客户端是谁。
反向代理
互联网不够发达的时候,我们都打过10086,有事儿就找客服,全国31个省都有自己的客服中心,每个客服中心都有上百个客服小哥小姐姐,我们不关心给你分配的是谁,只需要接通10086后会自动给你分配客服给你,这就是反向代理。
反向代理就是代理服务端,客户端不知道服务端是谁。
反向代理服务器可以充当“交通警察”,如上图,位于后端服务器(baidu)前面,并以最大化速度和容量利用率的方式在一组服务器上分发客户端请求,同时确保没有一个服务器过载,可以降低性能。如果服务器出现故障,负载均衡器会将流量重定向到其它正常的服务器上。
爬虫的小伙伴可以去领取免费的代理IP试一下啦!
国内高质动态IP。时效2-10分钟,注册免费领取一万代理IP。注册地址
电脑:
代理云 - 可视化用户控制台console.v4.dailiyun.com/user/?channel=wym手机:
代理云 - 可视化用户控制台console.v4.dailiyun.com/user/mobile/?channel=wymM通过应用场景理解会更容易一点
代理
场景:我需要访问一个服务器C,但是由于某些原因我无法访问到它,(典型的就是你翻墙,然后failed了),可是我就是控制不住自己,这个时候,服务器B告诉我,来吧,你想要什么,我来帮你传话,于是,我把自己的请求给了B,B接收到之后,帮我转给了C,(因为B和C之间的线路是畅通的),C把返回结果给了B,B非常友好地把结果又还给了我,我觉得太好用了简直,于是我周围的小伙伴都开始将请求发给B,通过B的转发,来获取C的信息,这个时候对于服务器C,C只知道是B发了请求过来,不知道我们这群小伙伴的存在,所以这就是代理。
反向代理
场景:我向B发送了一个请求,B对我的请求进行分析,发现我请求的是文章详情,于是B将请求转发给处理文章详情的应用服务器C1,我又向B发了一个请求,B解析之后,发现请求的是我的声望值等个人信息,于是B将请求转发给专门处理个人信息的应用服务器C2,就这样,我不在乎我要请求的数据是在C1,C2,还是C3上,我只需要发送请求到B就可以了,B会对我的请求进行解析,决定转发请求给Cx来处理,并得到处理结果后返回给我。
概括一下就是,一个请求对于客户端是透明的,我不知道我的请求具体由谁处理,我将请求都发给B,至于B发给Cx,随便。
代理与反向代理在实际工程中应用很广泛,代理在大家平常生活的翻墙中应该用过很多了,反向代理则是许多大公司业务处理过程中的经典方式,前端由一个nignx负责根据用户的请求信息转发请求给后端相应的应用服务器(这个过程中也可以加入负载均衡)。
原文地址:代理与反向代理,以及其应用场景_hungry0_0的博客-CSDN博客
简单来说,正向代理与反向代理最简单的区别是,正向代理隐藏的是用户,反向代理隐藏的是服务器