nginx重新整理——————nginx 的设计模型[八]
前言
简单介绍一下nginx的设计模型,对我们设计程序还是有一定帮助的。
正文
这里先列一下模型哈,后面有深入篇,介绍的比较清楚。
nginx 的处理模型:

nginx 进程模型:

可以看到下面列出了进程:

这里的worker 进程只有一个哈。

同样可以看到他们的关系,父进程是master process nginx。
然后我们看一下nginx -s reload 重新加载配置做了什么,前文提及到一个东西,那就是这个是让worker 优雅的退出。
执行完后再看一下:

上面那两个进程不见了,取而代之的是后面那两个进程。
有时候我们执行nginx -s reload 不生效,这是为什么呢,因为是优雅退出,老的还在处理,所以可以观察一下进程。
同样这个命令其实也是和kill -HUB pid一样的。
同样nginx -s quit,也是有对应的命令的,kill -SIGTERM pid 效果其实是一样的。
对worker pid 执行:kill -SIGTERM pid,那么workder 会优雅推出。但是父进程检测到和其期望的不相符合,那么会再创建一个。

对父进程执行kill -SIGTERM pid 其实和nginx -s quit 一样的。
那么还有那些信号量可以管理nginx的进程呢?
master 进程:
监控worker 进程: CHLD(当子进程结束的时候要向父进程发送CHLD信号)
管理worker 进程
接收信号:
term,int(立即停止)
quit(优雅停止)
hub(重载配置文件)
usr1(重新打开日志文件)
usr2(只能通过kill 发送, 热部署)
winch(只能通过kill发送,停止worker)
worker 进程:
term,int(立即停止)
quit(优雅停止)
usr1(重新打开日志文件)
winch(只能通过kill发送,停止worker)
nignx命令行:
reload :HUP
reopen:USR1
stop:TERM
quit:QUIT
reload 执行流程:
向master 进程发送hub 信号(reload 命令)
master 进程校验配置语法是否正确
master 进程重新打开新的监听端口
master 进程用新配置启动新的worker 自进程
master 进程向老wokrer 进程发送quit信号
老worker 进程关闭监听句柄,处理完当前连接后结束进程
可以看到只有到这个关闭监听句柄了,才真的老的worker才不做处理了。
然后quit之后,master 会有一个定时器,如果worker 还没有退出,那么master 会强制杀死worker进程。
热升级流程:
将旧的nginx 换成新的nginx 文件
向master 进程发送usr2信号
master 进程修改pid 文件名,加后缀.oldbin
master进程用新的nginx 文件启动新的master 进程
向老的master 进程发送winch信号,关闭老的worker
回滚:向老的master 发送hup,想新的master 发送quit。
优雅退出worker 过程:
设置定时器 worker_shutdown_timeout
关闭监听句柄
关闭空闲链接
在循环中等待全部连接关闭
退出进程
这个循环中等待全部连接关闭,可能很长时间,如果到达了worker_shutdown_timeout设置的时间,那么也会被强制关闭。
结
下一届介绍nginx的网络模型。
nginx重新整理——————nginx 的设计模型[八]的更多相关文章
- 用lua扩展你的Nginx(整理)-----openresty
用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...
- 用lua扩展你的Nginx(整理)
首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...
- nginx的入门到框架设计
mac上安装nginx 安装与启动 安装 brew install nginx 命令 通过 Homebrew 下载的软件默认位置在 /usr/local/Cellar 应该ln-s 加连接就能全局 n ...
- [转帖]nginx基础整理
nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...
- linux C++ 通讯架构(一)nginx安装、目录、进程模型
nginx是C语言开发的,号称并发处理百万级别的TCP连接,稳定,热部署(运行时升级),高度模块化设计,可以用C++开发. 一.安装和目录 1.1 前提 epoll,linux内核版本为2.6或以上 ...
- Nginx基础整理
目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...
- 菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t[转]
菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...
- Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙
Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...
- 一:Nginx知识整理
Nginx与服务器集群 一:集群 1.什么是集群 集 合在一起 放在一起 群 一堆 很多 服务器架构集群:多台服务器组成的响应大并发,高数据量访问的架构体系. 分布式服务器架构: 特点: 1)成本高 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
随机推荐
- 【aspose-words】Aspose.Words for Java模板语法详细剖析
前言 缘由 aspose-words模板语法再了解 垂死病中惊坐起,小丑竟是我自己.对于aspose-words的使用本狗自以为已炉火纯青,遂在新的迭代任务中毛遂自荐,并在小姐姐面前吹了一个大牛,分分 ...
- 继续总结Python中那些简单好用的用法
上一篇文章Python中那些简单又好用的特性和用法发出后,群里的小伙伴又给补充了几个好用的用法,结合生产实用经验汇总整理如下,各位看官如有需要请自取 反射,反射是一种机制,可以在运行时获取.检查和修改 ...
- Django 初步使用
Django 框架系列 目录 Django 框架系列 一. 安装启用 1.1 主流web框架概述 1.2 安装版本 1.3 启动的两种方式 1)命令行创建 2)pycharm创建 3)两种方式的区别 ...
- Xmind 括号图 风格不错,挺好看的
Xmind 括号图 风格不错,挺好看的 之前没注意到呢~ 又搞了个竖屏的,竖屏的关键点是 先隐藏第一层包括线,然后线就全部隐藏了,然后再选择要显示线的那部分,让线显示就ok了.
- [置顶]
drools规则引擎因为内存泄露导致的内存溢出
进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...
- 译:使用现代的 Node.js 构建简单的CLI工具
原文地址: https://evertpot.com/node-changelog-cli-tool/ 作者: Evert Pot 发布时间:2023-02-13 只使用 Node.js 的标准库,不 ...
- isPrimitive()方法和包装类
java.lang.Class.isprimitive()是说:确定指定的Class对象是基本类型,其返回是个boolean值,true代表你指定的这个Class对象是基本类型,false代表这个Cl ...
- AI金融预测领域综述文章筛选,附论文及代码链接,2021年版
21年的综述最近读了3篇,总结笔记如下: (2021)Systematic Literature Review: Stock Price Prediction Using Machine Learni ...
- 聊一下Button事件、命令、行为的触发顺序
1.我们新建一个xaml <StackPanel Width="200" Margin="20"> <Button Height=" ...
- Oracle 索引原理
B-Tree索引 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点. 可以用下图一来描述B树索引的结构.其中,B表示分支节点,而L表示叶子节点. 对于分支节点块(包括根节点块)来说,其所 ...