最近看陶辉老师的「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逐步关闭旧的worker
  • kill -QUIT 旧主进程的PID关闭旧的master
    备注:如果回滚向老进程发送HUB,向新进程发送QUIT

Nginx基本架构及模块分类

同步异步与阻塞非阻塞

阻塞与非阻塞主要在讨论操作系统底层的实现效果

阻塞: 进程运行所需条件没准备好时 操作系统将进程sleep 直到有条件满足时唤醒

非阻塞:进程运行所需条件没准备好时 在时间片用完前不会被切换掉 进程处理后续的操作

同步与异步讨论的是业务逻辑的事情

同步:调用接口后需要等待接口处理完数据并相应进程才能继续执行

异步:调用接口后不需要等待数据处理完可以继续执行,后续数据准备好通过一定的方式获得,例如回调

例子:

以超市买东西付款为例。

同步阻塞:需要等收银员扫描完我的商品后才能付款 我才能干别的事情。再这之前我一直看着她。

同步非阻塞:你先扫描 我先去看看别的东西。过一会看一眼服务员扫了多少了 也就是轮询。

异步非阻塞: 我就在隔壁买个咖啡。扫完了你叫我一声。

异步阻塞 应该不存在吧。

Linux的几个I/O模型

Nginx用到的几个容器

进程间通信使用共享内存

数组 ngxarray_t
链表 ngx_list_t
队列 ngx_q_t
哈希表 ngx

红黑树
基数树

未完待续…


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Nginx学习笔记(二) 上一篇
Github Action尝鲜-创建Hexo Deploy Action 下一篇