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 ...
随机推荐
- Java 线程通信 例子:使用俩个线程打印1-100.线程1 线程2 交替打印
1 package bytezero.threadcommunication; 2 3 /** 4 * 线程通信的例子:使用俩个线程打印1-100.线程1 线程2 交替打印 5 * 6 * 涉及到的三 ...
- Java GUI swing 可执行程序 jar (java -jar)idea
创建项目 可以用maven idea设置 into 那个 参考资料 Java 基础 https://www.liaoxuefeng.com/wiki/1252599548343744/12604545 ...
- 日常办公——Excel中重复打印标题的设置
打印预览时,所在数据行或列不能显示在同一页,在打印区域之外还有内容,为了方便阅读,可使用顶端标题行重复或左端标题行重复,具体方法如下: 按顺序操作,完成后点击确定即完成操作.
- 华为sound x智能音箱初体验
外观颜值 在这个网红遍地的年代,好看的皮囊是那么的重要.很多东西,买与不买,只是你在电脑的橱上看它一眼.颜值对一个消费电子产品来说,在这个虚拟的互联网世界中是那么的重要.sound x的初次看来, ...
- 专访OV季军|毕业转为freelancer,他如何斩获大量CG奖项?
"新锐先锋,玩转未来"--首届实时渲染3D动画创作大赛由瑞云科技主办,英伟达.青椒云.3DCAT实时渲染云协办,戴尔科技集团.Reallusion.英迈.万生华态.D5渲染器.中视 ...
- 记录--你敢信?比 setTimeout 还快 80 倍的定时器
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 起因 很多人都知道,setTimeout是有最小延迟时间的,根据MDN 文档 setTimeout:实际延时比设定值更久的原因:最小延迟时 ...
- 常用命令---less---more
常用命令---less---more 常用选项 less 和 more 都是 Linux 和类 Unix 系统中的文本阅读工具,主要用于分页查看文件内容.虽然两者都能让用户逐屏查看大文件,但 less ...
- KingbaseES 执行计划常见节点介绍
KingbaseES中explain命令来查看执行计划时最常用的方式.其命令格式如下: explain [option] statement 其中option为可选项,常用的是以下5种情况的组合: a ...
- 【Java】abstract class 和 interface 有什么区别?
含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象.含有 abstract 方法的类必须定义为 abstract class,abstract class ...
- 【Java】使用位运算完成数组中两个变量交换位置
1 /** 2 * 3 */ 4 package com.raliable.chapter_0; 5 /** 6 * @author : Administrator 7 * @date :2022年4 ...