5分钟彻底了解Nginx的反向代理

前言

众所周知,Nginx是现如今最热门的反向代理服务器了,并且通Apache一样都是属于web服务器。Apache的主要优点是稳定和支持跨平台,但是受限于Apache诞生的年代较早,互联网环境远没有现如今的复杂,所以Apache设计之初是重量级的并且不支持高并发。
正所谓时势造英雄,于是支持高并发的Nginx就诞生了,Nginx是基于事件驱动架构,所以可以支持百万级的TCP连接,Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。


正向代理和反向代理

首先的了解什么是代理,一个代理过程涉及三个角色: 代理对象、被代理对象、目标对象,三个角色关系如下:

被代理对象委托代理对象访问目标对象

以打官司为例,张三想要打官司于是请了李四律师帮忙打官司,那么张三就是被代理对象,不用亲自打官司,而是委托代理对象李四律师;李四律师就是代理对象,代理张三打官司事务;而目标对象就是打官司。


正向代理

假设我们需要访问国外的网站比如Google,此时可能通过国内的浏览器是如何直接访问Google的,此时假设有一台服务器可以访问Google,并且国内的客户端可以访问这台服务器,那么就可以将这台服务器叫做正向代理服务器。
国内客户端将请求发送给代理服务器,代理服务器再将请求发送给Google,此时就完成了一次正向代理的过程。
如下图示:
image

可以发现正向代理有几个特点:

1、客户端明确知道要访问的具体服务器地址

2、目标服务器不知道客户端信息,只知道所有请求都是由代理服务器发送过来的。

3、客户端需要配置代理服务器信息

所以正向代理代表的是客户端,代客户端发送请求。客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回给客户端。

正向代理的用途

1、访问原本无法访问或不想直接访问的资源,比如访问国外资源等;

2、缓存,代理服务器可以将目标服务器的资源进行缓存,这样客户端可以直接从代理服务器获取缓存数据;

3、管控客户端行为,记录客户端请求日志等;


反向代理

以淘宝为例,为了应付高并发请求,淘宝服务器会采用集群的方式部署服务器,这样客户端就不知道将请求发送到哪一台服务器,假设有一台服务器可以根据规则来将客户端请求进行转发,那么就可以将这台服务器叫做反向代理服务器。
客户端将请求发送给代理服务器,服务器根据转发策略,选取一台服务器进行转发,这样就完成了一个反向代理的过程。
如下图示:
image
可以发现反向代理有几个特点:

1、客户端并不知道要访问的具体服务器地址,具体服务器地址是由代理服务器选择的。

2、客户端并不需要配置代理服务器信息,代理服务器对于客户端而言是透明的

3、目标服务器是知道请求是由哪个客户端请求过来的

所以反向代理代表的是服务器,代服务器接收请求,客户端将请求发送给代理服务器,代理服务器将请求转发给目标服务器,目标服务器将请求结果返回给代理服务器,代理服务器再将结果返回个客户端。

反向代理的用途

1、保护服务器安全,服务器内网部署即可,而只需要将代理服务器暴露到外网

2、负载均衡,通过代理服务器来根据负载均衡策略维护服务器的请求数


总结

正向代理代理的是客户端发送请求,客户端和代理服务器处于同一个网络环境,隐藏了客户端信息

正向代理主要作用是访问不可访问的资源和统一管控客户端请求

反向代理代理的是服务器接收请求,服务器和代理服务器处于同一个网络环境,隐藏了服务器信息

反向代理主要作用是保护内网服务器和负载路由转发

本质上正向代理和反向代理都是处于客户端和服务器之间的角色,客户端都是将请求给代理,代理将请求转发给服务器的过程。而实际应用场景中,往往可能是同时存在正向代理和反向代理的,如下图示:

image

posted @ 2021-05-21 16:03  Lucky帅小武  阅读(3174)  评论(0编辑  收藏  举报