NGINX做反向代理缓存服务器原理

代理服务可以简单的分为正向代理和反向代理

正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问web服务器,并将web服务器的response传回到客户端;
.
反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源,也可以设置一个代理服务器,它提供的服务就是反向代理,反向代理服务器接收来自Internet的连接,然后将请求转发给内部网络上的服务器,并将response传回给Internet上请求连接的客户端;

反向代理作用

1)保护网站安全:任何来自Internet的请求都必须要先经过代理服务器:
NGINX做反向代理缓存服务器原理_第1张图片
2)通过配置缓存功能加速web请求:可以缓存真实web服务器上的某些静态资源,减轻真实web服务器的负载压力:

NGINX做反向代理缓存服务器原理_第2张图片
3)实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力:
NGINX做反向代理缓存服务器原理_第3张图片

什么是nginx

1.nginx简介
nginx是一款轻量级的网页服务器,反向代理器以及电子邮件代理服务器。因为它的稳定性、丰富的功能集、示例配置文件和低系统资源消耗而闻名。nginx(发音同engin x),它是俄罗斯程序员lgor Sysoev所开发的。起初是供俄国超大型的门户网站及搜索引擎rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以运行在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Micosoft Windows等系统中运行。
.
2.nginx的核心特点
(1)跨平台:nginx可以在大多数OS编译运行,而且也有Windows的版本;
(2)配置简单:非常容易上手
(3)非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数(这得益于nginx使用了epoll模型)

注:
对于一个web服务器来说,首先看一个请求的基本过程:建立连接-接收数据-发送数据。在系统底层看来:上述过程在系统底层就是读写事件。
如果采用阻塞调用的方式,当读写事件没有准备好时,那么就和只能等待,当前线程被挂起等事件准备好了才能进行读写事件
如果采用非阻塞调用的方式,事件马上返回,告诉你事件还没准备好,过会再来吧。过一会,再来检查一下事件,直到事件准备好了为止,在这期间你就可以去先做其他事情,然后再来看看事件好了没。虽然不阻塞了但你也需要时不时来检查一下事件的状态,你可以做更多的事情了,但带来的开销也不小。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

3.事件驱动
通信机制采用epoll模型,支持更大的并发连接
非阻塞通过不断检查事件状态来判断是否进行读写操作,这样带来的开销很大,因此就有了异步阻塞的时间处理机制。这种机制让你可以同时监控多个事件,调用他们是非阻塞的,但是可以设置超时事件,在超时时间之内,如果有事件准备好了,就返回。这种机制解决了上面阻塞调用与非阻塞调用的两个问题。
以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里面。如果有事件准备好了,那么就去处理:当事件没有准备好时,才在epoll里等着。这样,我们就可以同时处理大量的并发了,当然,这里的并发请求,是指未处理完的请求。线程只有一个,所以能同时处理的请求当然只有一个了,只是在请求之间不断进行切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价的,你可以理解为循环处理多个准备好的事件。
多线程方式相比,这种事件处理方式是有很大优势的,不需要创建多线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级,并发数再多也不会导致无谓的资源浪费(上下文切换)。对于Apache服务器,每个请求会独占一个工作线程,当并发数上到几千时,就同时有几千的线程在处理请求了。这对于操作系统来说,是个不小的挑战:因为线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,性能自然就上不去,导致在高并发场景下性能下降严重。
总结:通过异步阻塞的事件处理机制,nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级
.
4.master\worker结构
一个master进程,生成一个或多个worker进程。
NGINX做反向代理缓存服务器原理_第4张图片


master-worker设计模式主要包含两个主要组件master和worker,master维护者worker队列,将请求下发到多个worker并行执行,worker主要进行实际逻辑计算,并将结果返回给master
nginx采用这种进程模型的好处:可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则很快重新启动新的worker进程。当然,worker进程的异常退出肯定是程序有bug了,异常退出会导致当前worker上所有的请求失败,不够不会影响到所有请求,所以降低了风险

5.内存消耗小
处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个nginx进程才消耗150M内存
.
6.内置健康检查功能
如果nginx代理的后端某台web服务器宕机了,并不会影响前端访问
.
7.节省带宽
支持GZIP压缩,可以添加浏览器本地缓存的header头
.
8.稳定性高
用于反向代理,宕机的概率微乎其微

你可能感兴趣的:(架构,软件,nginx,服务器,缓存)