前言

简单介绍一下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 执行流程:

  1. 向master 进程发送hub 信号(reload 命令)

  2. master 进程校验配置语法是否正确

  3. master 进程重新打开新的监听端口

  4. master 进程用新配置启动新的worker 自进程

  5. master 进程向老wokrer 进程发送quit信号

  6. 老worker 进程关闭监听句柄,处理完当前连接后结束进程

可以看到只有到这个关闭监听句柄了,才真的老的worker才不做处理了。

然后quit之后,master 会有一个定时器,如果worker 还没有退出,那么master 会强制杀死worker进程。

热升级流程:

  1. 将旧的nginx 换成新的nginx 文件

  2. 向master 进程发送usr2信号

  3. master 进程修改pid 文件名,加后缀.oldbin

  4. master进程用新的nginx 文件启动新的master 进程

  5. 向老的master 进程发送winch信号,关闭老的worker

  6. 回滚:向老的master 发送hup,想新的master 发送quit。

优雅退出worker 过程:

  1. 设置定时器 worker_shutdown_timeout

  2. 关闭监听句柄

  3. 关闭空闲链接

  4. 在循环中等待全部连接关闭

  5. 退出进程

这个循环中等待全部连接关闭,可能很长时间,如果到达了worker_shutdown_timeout设置的时间,那么也会被强制关闭。

下一届介绍nginx的网络模型。

nginx重新整理——————nginx 的设计模型[八]的更多相关文章

  1. 用lua扩展你的Nginx(整理)-----openresty

    用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...

  2. 用lua扩展你的Nginx(整理)

    首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...

  3. nginx的入门到框架设计

    mac上安装nginx 安装与启动 安装 brew install nginx 命令 通过 Homebrew 下载的软件默认位置在 /usr/local/Cellar 应该ln-s 加连接就能全局 n ...

  4. [转帖]nginx基础整理

    nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...

  5. linux C++ 通讯架构(一)nginx安装、目录、进程模型

    nginx是C语言开发的,号称并发处理百万级别的TCP连接,稳定,热部署(运行时升级),高度模块化设计,可以用C++开发. 一.安装和目录 1.1 前提 epoll,linux内核版本为2.6或以上 ...

  6. Nginx基础整理

    目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...

  7. 菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t[转]

    菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表 ngx_chain_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.c ...

  8. Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙

    Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...

  9. 一:Nginx知识整理

    Nginx与服务器集群 一:集群 1.什么是集群 集 合在一起 放在一起 群 一堆 很多 服务器架构集群:多台服务器组成的响应大并发,高数据量访问的架构体系. 分布式服务器架构: 特点: 1)成本高 ...

  10. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

随机推荐

  1. [VueJsDev] 其他知识 - NestJS 学习内容

    [VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html NestJS 学习内容 NestJS 学习总结 Step. ...

  2. WPF之资源

    目录 WPF对象资源的定义和查找 动态.静态使用资源 向程序添加二进制资源 字符串资源 非字符串资源 使用Pack URI路径访问二进制资源 WPF不但支持程序级的传统资源,同时还推出了独具特色的对象 ...

  3. linux程序运行结果在打印到屏幕的同时写入文件

    1.使用script工具 script工具是一个非常使用的工具,可以把输出到终端的信息记录下来.使用方法如: (1)输入 script log.txt命令开始保存终端输出的信息 ,其中log.txt为 ...

  4. 基于AmbiqMicro-AMA3B2KK-KBR的可穿戴智能手环解决方案之心率测量源码解析

    一 前记 梳理该可穿戴产品的手环,产品,是一种成长.也是一个总结. 二 源码解析 1 初始化:这里主要初始化心率的检测间隔时间和心率值的位数. /* initialize heart rate pro ...

  5. api-ms-win-crt-***.dll, api-ms-win-core-***.dll,win7以后kernel.dll,msvc*.dll的改变。api-ms-win-crt-***.dll 有问题就是 c++ redist 版本过低。

    api-ms-win-crt-***-|1-1-0.dll是redistributable c++的一部分.以往只会因为msvc*NNN.dll才要去找对应的redistributable c++版本 ...

  6. MediaCodec硬解流程

    一 MediaCodec概述 MediaCodec是Android 4.1(api 16)版本引入的低层编解码接口,同时支持音视频的编码和解码.通常与MediaExtractor.MediaMuxer ...

  7. 游戏引擎中的实时渲染和在V-Ray中渲染有什么区别 2022-11-25

    游戏引擎中的实时渲染和在V-Ray中渲染有什么区别,下面我们一起来分析一下,从2个方面来具体分析实时渲染和在V-Ray中渲染种的不一样的区别. 原理区别 VRay等渲染器原理上叫做离线渲染(Offli ...

  8. Vulnhub靶场--EVILBOX: ONE

    环境配置 靶机连接 攻击者主机IP:192.168.47.130 目标主机IP:192.168.47.131 信息搜集 扫描目标主机,发现目标主机开放了22.80端口 ┌──(kali㉿kali)-[ ...

  9. 基于Python代码的相关性热力图,VIF共线性诊断图及残差四图的使用及解释

    注:热力图和共线性诊断图易看易解释,这里不再阐述 残差四图(Residuals vs Fitted Plot,Normal Q-Q Plot,Scale-Location Plot,Cook's Di ...

  10. 提升团队协作效率:欧奥PicHome打造无缝资料共享平台

    1. 引言 在快节奏的工作环境中,团队成员需要快速访问和共享信息.有效的资料共享不仅提高工作效率,还能促进团队协作和创新.然而,许多团队仍在使用传统的文件共享方法,这些方法往往效率低下,难以满足现代工 ...