Nginx学习笔记(一)
最近看陶辉老师的「Nginx核心知识100讲」做一些笔记,记录一些实用的配置和操作。
本篇记录nginx基本架构的讲解。
Mark一个日志监控程序
Mark一个可视化的日志监控程序GoAccess
使用信号管理父子进程
Nginx的进程包含master进程和worker进程,它们都是通过信号进行管理的,平时通过nginx -s command
来进行管理实际上是同样的原理。
它们可以接收的信号及对应操作如下
Master进程(管理worker进程)
信号 | 功能 | 命令行 |
---|---|---|
CHLD | 子进程终止的时候向Master进程发送(用于监控子进程) | |
TERM,INT | 终止 | stop |
QUIT | 优雅的退出 | quit |
HUP | 重载 | reload |
USR1 | 重新开始记录日志 | reopen |
USR2 | 关闭旧Nginx主进程并启动新的 | |
WINCH | 退出旧的主进程 |
Worker进程
信号 | 功能 | 命令行 |
---|---|---|
TERM,INT | 启动,终止 | stop |
QUIT | 优雅的退出 | quit |
USR1 | 重新开始记录日志 | reopen |
WINCH | 退出旧的主进程 |
使用kill -signal PID
即可完成操作
热升级流程
- 将旧版本的Nginx替换,编译安装的话新程序直接编译到Nginx安装目录中
kill -USR2 旧主进程的PID
(旧的Nginx主进程将会把自己的进程文件改名为.oldbin)kill -WINCH 旧主进程的PID
逐步关闭旧的workerkill -QUIT 旧主进程的PID
关闭旧的master 备注:如果回滚向老进程发送HUB
,向新进程发送QUIT
Nginx基本架构及模块分类
同步异步与阻塞非阻塞
阻塞与非阻塞主要在讨论操作系统底层的实现效果
阻塞: 进程运行所需条件没准备好时 操作系统将进程sleep 直到有条件满足时唤醒
非阻塞:进程运行所需条件没准备好时 在时间片用完前不会被切换掉 进程处理后续的操作
同步与异步讨论的是业务逻辑的事情
同步:调用接口后需要等待接口处理完数据并相应进程才能继续执行
异步:调用接口后不需要等待数据处理完可以继续执行,后续数据准备好通过一定的方式获得,例如回调
例子:
以超市买东西付款为例。
同步阻塞:需要等收银员扫描完我的商品后才能付款 我才能干别的事情。再这之前我一直看着她。
同步非阻塞:你先扫描 我先去看看别的东西。过一会看一眼服务员扫了多少了 也就是轮询。
异步非阻塞: 我就在隔壁买个咖啡。扫完了你叫我一声。
异步阻塞 应该不存在吧。
Linux的几个I/O模型
Nginx用到的几个容器
进程间通信使用共享内存
数组 ngx_array_t 链表 ngx_list_t 队列 ngx_q_t 哈希表 ngx_ 红黑树 基数树
未完待续…
Nginx学习笔记(一)
https://blog.yrpang.com/posts/3009/