前言
众所周知,Nginx是现如今最热门的反向代理服务器了,并且通Apache一样都是属于web服务器。Apache的主要优点是稳定和支持跨平台,但是受限于Apache诞生的年代较早,互联网环境远没有现如今的复杂,所以Apache设计之初是重量级的并且不支持高并发。
正所谓时势造英雄,于是支持高并发的Nginx就诞生了,Nginx是基于事件驱动架构,所以可以支持百万级的TCP连接,Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
正向代理和反向代理
首先的了解什么是代理,一个代理过程涉及三个角色: 代理对象、被代理对象、目标对象,三个角色关系如下:
被代理对象委托代理对象访问目标对象
以打官司为例,张三想要打官司于是请了李四律师帮忙打官司,那么张三就是被代理对象,不用亲自打官司,而是委托代理对象李四律师;李四律师就是代理对象,代理张三打官司事务;而目标对象就是打官司。
正向代理
假设我们需要访问国外的网站比如Google,此时可能通过国内的浏览器是如何直接访问Google的,此时假设有一台服务器可以访问Google,并且国内的客户端可以访问这台服务器,那么就可以将这台服务器叫做正向代理服务器。
国内客户端将请求发送给代理服务器,代理服务器再将请求发送给Google,此时就完成了一次正向代理的过程。
如下图示:
可以发现正向代理有几个特点:
1、客户端明确知道要访问的具体服务器地址
2、目标服务器不知道客户端信息,只知道所有请求都是由代理服务器发送过来的。
3、客户端需要配置代理服务器信息
所以正向代理代表的是客户端,代客户端发送请求。客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回给客户端。
正向代理的用途
1、访问原本无法访问或不想直接访问的资源,比如访问国外资源等;
2、缓存,代理服务器可以将目标服务器的资源进行缓存,这样客户端可以直接从代理服务器获取缓存数据;
3、管控客户端行为,记录客户端请求日志等;
反向代理
以淘宝为例,为了应付高并发请求,淘宝服务器会采用集群的方式部署服务器,这样客户端就不知道将请求发送到哪一台服务器,假设有一台服务器可以根据规则来将客户端请求进行转发,那么就可以将这台服务器叫做反向代理服务器。
客户端将请求发送给代理服务器,服务器根据转发策略,选取一台服务器进行转发,这样就完成了一个反向代理的过程。
如下图示:
可以发现反向代理有几个特点:
1、客户端并不知道要访问的具体服务器地址,具体服务器地址是由代理服务器选择的。
2、客户端并不需要配置代理服务器信息,代理服务器对于客户端而言是透明的
3、目标服务器是知道请求是由哪个客户端请求过来的
所以反向代理代表的是服务器,代服务器接收请求,客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回个客户端。
反向代理的用途
1、保护服务器安全,服务器内网部署即可,而只需要将代理服务器暴露到外网
2、负载均衡,通过代理服务器来根据负载均衡策略维护服务器的请求数
总结
正向代理代理的是客户端发送请求,客户端和代理服务器处于同一个网络环境,隐藏了客户端信息
正向代理主要作用是访问不可访问的资源和统一管控客户端请求
反向代理代理的是服务器接收请求,服务器和代理服务器处于同一个网络环境,隐藏了服务器信息
反向代理主要作用是保护内网服务器和负载路由转发
本质上正向代理和反向代理都是处于客户端和服务器之间的角色,客户端都是将请求给代理,代理将请求转发给服务器的过程。而实际应用场景中,往往可能是同时存在正向代理和反向代理的,如下图示:
原文链接:https://blog.51cto.com/u_16213673/9893591