007[补] Nginx笔记03
1 Nginx架构基础
Nginx运行在企业内网的最外层,处理的流量最多,任何一种问题在不同数量级下解决方案是完全不同的,在处理Nginx场景中所有的问题都会被放大,所以要深入理解Nginx。
为什么采用Master-Worker模型
为什么Worker数量要与CPU核数相匹配
为什么在多个Worker进程间共享数据时TLS限流限速
1.1 Nginx的请求处理流程

1.2 Nginx的进程结构

单进程结构,只适用于开发调试,生产使用多进程结构
为什么不使用多线程结构?
Nginx保持高可用性高可靠性,多线程共享地址空间当某第三方模块引发了一个地址空间导致的段错误时,在地址越界出现时会导致整个Nginx进程挂掉
1.3 演示
nginx是一个多进程的程序,多进程间通讯可以使用共享内存、信号等,进程间的管理通常只使用信号
配置nginx进程数
# 将worker进程数改为2
worker_processes 2;
# 重启nginx
sbin/nginx -s reload
操作
# 一个master进程,是用root启动的,进程ID是4322,两个worker子进程
ps -ef | grep nginx
# 下面两个命令等效,两个worker进程退出master进程再创建两个新的worker进程
sbin/nginx -s reload
kill -SIGHUP 4322
# 关闭一个worker进程
kill -SIGTERM 11735,master进程会再次创建一个新的worker进程

1.4 使用信号管理Nginx的父子进程

- TERM,INT 表示立刻停止nginx进程
- QUIT 表示优雅地停止nginx进程
- HUP 表示重启nginx进程
- USR1 重新打开日志文件,进行日志文件的切割
- USR2 只能通过kill,重启nginx用新的二进制nginx文件
- WINCH 只能通过kill,此命令只会关闭work进制,master进程保留,可用于版本回退(执行nginx -s reload)
1.5 重载配置文件流程


1.6 热升级的完整流程


1.7 优雅地关闭worker进程流程

1.8 网络收发与Nginx事件间的对应关系
1.8.1 网络传输

1.8.2 TCP流与报文

1.8.2 TCP协议与非阻塞接口

读事件与写事件主体是Nginx
事件是生产者
事件分发消费器
1.9 演示:网络事件
Wireshark抓包
TCP层:进程间的通讯
IP层:机器间相互找到
1.10 Nginx的事件驱动模型

1.11 epoll的优劣及原理
epoll:网络事件收集器模型

1.12 Nginx请求切换

1.13 同步&异步、阻塞&非阻塞之间的区别
1.13.1 阻塞调用

1.13.2 非阻塞调用

1.13.3 非阻塞调用下的同步与异步
