Nginx学习笔记(一)

本文最后更新于:2020年2月25日 晚上

最近看陶辉老师的「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用到的几个容器

进程间通信使用共享内存

数组 ngx_array_t
链表 ngx_list_t
队列 ngx_q_t
哈希表 ngx_
红黑树
基数树

未完待续…