1.写在前面
前面的内容我们介绍Nginx的一些的基础内容,今天我们继续深入Nginx的介绍,主要介绍下Nginx的架构的基础。
2.Nginx的请求处理流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b5db0f567df42fe80a04f13bb25544b.png#pic_center)
Web、Email以及TCP流量通过Nginx的传输层状态机,经过HTTP状态机,然后再经过Mail状态机,然后将对应的流量发到对应的代理中,在这个过程中静态资源会缓存到磁盘中去,同时Access访问日志Error错误日志。中间经过的主要是非阻塞的事件驱动处理引擎,同时使用线程池处理磁盘阻塞调用。
3.Nginx进程结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa89a4b18fbe4fa5922d15a53726c320.png#pic_center)
主要是通过Master进程管理worker进程,所有的worker进程以及Cache Manager进程,Cache loader进程都是通过master进程创建出来的。
4.Nginx进程管理:信号
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb4c787a15324000a68c1182f5831e56.png#pic_center)
reload流程
-
向master进程发送HUP信号(reload命令)
-
master进程校验配置语法是否正确。
-
master进程打开新的监听端口。
-
master进程用新配置启动新的worker子进程。
-
master进程向老worker子进程发送QUIT信号。
-
老worker进程关闭监听句柄,处理完当前连接后结束进程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc0dfe7ddb7345c9a671dd5614edaa85.png#pic_center)
5.热升级的流程
热升级流程
-
将旧Nginx文件换成新的Nginx文件(注意备份)
-
向master进程发送USR2信号
-
master进程修改pid文件名,加后缀.oldbin
-
master进程用新Nginx文件启动新的master进程
-
向老master进程发送QUIT信号,关闭老master
-
回滚:向老master发送HUP,向新master发送QUIT
![在这里插入图片描述](https://img-blog.csdnimg.cn/a84d0c3ca9334be385ca97081e92af2b.png#pic_center)
6.worker进程:优雅的关闭
优雅的关闭
- 设置定时器:worker_shutdown_timeout
- 关闭监听句柄
- 关闭空闲连接
- 在循环中等待全部连接关闭
- 退出进程
7.网络收发与Nginx事件间的对应关系
![在这里插入图片描述](https://img-blog.csdnimg.cn/4515dd679b78429488e87a1fad6e956f.png#pic_center)
一个数据报文从主机A经过多个路由器最终到达目的地主机B
数据流经过应用层、传输层、网络层、链路层,包装好的报文,然后经过以太网,广域网,最后到达目标主机,在目标主机中也是先经过链路层、网络层、传输层、应用层,经过层层的解开报文,最后到达对应的应用处理程序。
TCP流与报文
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd6cda552be4428d80a2594372474303.png#pic_center)
物理层到数据链路层,包装了一层目的和源的MAC地址
数据链路层到网络层,包装了一层目的和源的IP地址
网络层到传输层,包装了一层目的和源的端口
最后的应用层,就是包含了目的和源的端口,IP地址,还有就是MAC地址。
TCP协议与非阻塞接口
![在这里插入图片描述](https://img-blog.csdnimg.cn/a25b74e764d44e998af81b5aab29b2d7.png#pic_center)
虽然事件类型很多,但是最终都可以分成两种,一种是读事件,一种是写事件,其中读事件包括Accept建立连接,Read读消息。写事件包括Write写消息。
8.Nginx事件循环
![在这里插入图片描述](https://img-blog.csdnimg.cn/002ed44686204e9997a6f0e14d8422a9.png#pic_center)
9.epoll的优劣及原理
![在这里插入图片描述](https://img-blog.csdnimg.cn/a956092a4a2b4373807f791c13925003.png#pic_center)
epoll
-
前提:
-
实现
-
使用
-
![在这里插入图片描述](https://img-blog.csdnimg.cn/da51c44d91a840c5abc33c78652d6b8b.png#pic_center)
10.Nginx的请求切换
![在这里插入图片描述](https://img-blog.csdnimg.cn/47460cd44cc34f73bc19f57f91d9e1fa.png#pic_center)
11.同步&异步、阻塞&非阻塞之间的区别
阻塞调用
以Accept为例
![在这里插入图片描述](https://img-blog.csdnimg.cn/3db2a05f0a12404a9badf6be917e194f.png#pic_center)
非阻塞调用
![在这里插入图片描述](https://img-blog.csdnimg.cn/efd34143a8fe46cf89377914781cd4b3.png#pic_center)
非阻塞调用下的同步和异步
![在这里插入图片描述](https://img-blog.csdnimg.cn/9709c406f07c45f19df0f3a1e2413aab.png#pic_center)
12.Nginx模块
特征
- 内聚
- 抽象
![在这里插入图片描述](https://img-blog.csdnimg.cn/46e73fd041c543c8a803bd4f4943f438.png#pic_center)
模块的分类
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b126f8828f544a9a0408bff9b01e257.png#pic_center)
13.Nginx如何通过连接池处理网络请求
构成
![在这里插入图片描述](https://img-blog.csdnimg.cn/a6dca92d11a24d37bbb807a738fb5337.png#pic_center)
核心数据结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c001c3caa874b4abc3aee4c0ce6b15b.png#pic_center)
14.内存池对性能的影响
![在这里插入图片描述](https://img-blog.csdnimg.cn/727953f791f34e35a28e0aeaa3e344cf.png#pic_center)
15.Nginx进程之间的通讯方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/f196e9867c52458fadac66cd5c0773a3.png#pic_center)
共享内存:跨worker进程通讯
![在这里插入图片描述](https://img-blog.csdnimg.cn/a478ef792fb547f2a1906cf981c64f14.png#pic_center)
16.Slab内存管理
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9df51e3af15473fa88ff811e53b16a6.png#pic_center)
ngx_slab_stat:统计Slab使用状态
![在这里插入图片描述](https://img-blog.csdnimg.cn/839478da38694427ba8a02ba71c7b591.png#pic_center)
17.Nginx中最常用的容器
Nginx哈希表
![在这里插入图片描述](https://img-blog.csdnimg.cn/0ca7941ffd914fb0b68425aa27fc110f.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d44866cb24084edaa5c9a400100cb085.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b2f38f070a7741fdab72b78857153922.png#pic_center)
时间复杂度
![在这里插入图片描述](https://img-blog.csdnimg.cn/88de32c30e8c4d158a391c70a288e74f.png#pic_center)
红黑树的使用模块
![在这里插入图片描述](https://img-blog.csdnimg.cn/d57ecf8fdf1d486e853a58c1f553157a.png#pic_center)
18.使用动态模块来提升运维效率
![在这里插入图片描述](https://img-blog.csdnimg.cn/e473ef0f622f410291f385cbf9b3263a.png#pic_center)
19.写在最后
本篇博客主要的介绍了下Nginx的架构基础,后面会继续介绍Nginx剩下的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)