当前位置: 首页 > news >正文

Nginx - 深入理解nginx的处理请求、进程关系和配置文件重载

概述

Nginx的系统学习整理的第三篇博客,主要介绍nginx的应用场景和架构基础,以便更好的理解,再生产环境中进行性能调优。

Nginx的三个主要应用场景

在这里插入图片描述

1.静态资源服务,通过本地文件系统提供服务
2.反向代理服务,强大的性能,缓存 和负载均衡服务
3.ApiServer服务 ,比如像php-fpm、tomcat、uwsgi等

运行中的Nginx进程间的关系

Nginx部署以后,我们首先要了解的是Nginx进程间的关系,是怎么做到处理高并发的请求的原理和实现,可以使用pstree命令查看master和worker的关系。

# pstree 命令工具安装
yum -y install psmisc#netstat 命令工具安装:
yum -y install net-tools
[root@0bb2985dbc83 servers]# pstree -ahpu | grep nginx|-nginx,193|   |-nginx,246,nobody|   |-nginx,247,nobody|   |-nginx,248,nobody|   |-nginx,249,nobody|   |-nginx,250,nobody|   |-nginx,251,nobody|   |-nginx,252,nobody|   `-nginx,253,nobody

Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境下要按照master-worker方式配置启动多个进程,这样做主要有两点:

  • 由于master进程不会对用户请求提供服务,主用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注自己的纯管理工作。
  • 多进程的worker可以充分利用常见的SMP多核架构,从而实现微观上真正实现多核并发处理。

一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同worker进程之间处理并发请求几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,当Nginx上的进程数与CPU的核心数相等时,进程间的切换代价是最小的。

worker_processes 8;

Nginx请求处理流程

Nginx可以搭建静态web服务器,反向代理服务器,对一些限流、限速的方向上是有所不同的,这些都要求我们对Nginx架构有清晰的了解,需要我们从Nginx内部看Nginx是怎样处理请求的。

在这里插入图片描述

当web请求或者tcp请求进入到Nginx上,Nginx内部有三个大的状态机,传输层(Tcp/Udp)状态机、Http状态机,以及处理邮件的Mall状态机,为什么要叫它状态机呢,是因为Nginx中的核心用非阻塞的事件驱动处理引擎,就是我们所说的epoll异步处理引擎以后,通常都需要使用状态机对请求进行正确处理的。

当处理静态资源的时候会有一个问题,当整个内存不足时完全缓存文件信息的时候,AIO会退换成使用线程池处理磁盘的阻塞调用。

对于每一个处理完成的请求会记录到Access访问日记和错误日志里,更多的时候Nginx作为反向代理服务器使用的,可以使用协议传输到后面的服务器,也可以通过应用层的协议,代理到响应的应用服务器

配置文件重载的原理真相

想了解配置文件重载的原理真相,需要先了解Nginx的组成,Nginx一共有四个组成部分:

  • Nginx二进制可执行文件,由各源码编译出的一个文件
  • Nginx.conf配置文件,控制Nginx的行为
  • Access.log访问日志,记录每一条http请求信息
  • Error.log错误日志,定位问题

reload配置文件重载流程

Nginx配置文件重载如图所示,大致可分三步:

在这里插入图片描述

1.更新nginx.conf配置文件,向Master发送SIGHUP信号,或者执行nginx -s reload

2.老配置worker进程再完成已存在时优雅的退出。
3.Nginx始终保持运行中,平滑的更换了配置文件,新来的请求新启动由黄色的worker进程处理。

注意,在新老配置进程交替过程中,新老进程是同时存在的,如果是异常的请求出了问题,客户端长时间没有处理,会导致请求长时间占用在内存中,worker进程就会一直存在,解决这个问题的办法设置,可以设置worker_shutdown_timeout解决。

1.向master进程发送HUP信号(reload命令)
2.master进程校验配置语法是否正确,相当于执行`nginx -t`
3.master打开新的监听端口
4.master进程用新的配置启动新的worker子进程
5.master进程像老worker子进程发送Quit信号
6.老worker进程关闭监听句柄,处理完当前链接后结束进程。

热升级流程

1.将旧Nginx文件换成新的Nginx文件(注意备份)
2.向master进程发送USR2信号
3.master进程修改pid文件名,后缀加.oldbin
4.master进程用新的Nginx文件启动新master进程
5.向老master进程发送QUIT信号,关闭老master
6.回滚:向老master发送HUP,向新master发送QUIT

常说Nginx要优雅的关闭worker进程,Nginx的worker进程可以识别出当前的链接没有正在处理请求,这个时候我们在关闭链接。

Nginx优雅的关闭主要针对的是http请求,对于想tcp、websocket这种请求Nginx也是无能为力的。

相关文章:

Nginx - 深入理解nginx的处理请求、进程关系和配置文件重载

概述 Nginx的系统学习整理的第三篇博客,主要介绍nginx的应用场景和架构基础,以便更好的理解,再生产环境中进行性能调优。 Nginx的三个主要应用场景 1.静态资源服务,通过本地文件系统提供服务 2.反向代理服务,强大的性…...

华为OD机试 - 服务依赖(Python)| 真题含思路

服务依赖 题目 在某系统中有众多服务,每个服务用字符串(只包含字母和数字,长度<=10)唯一标识,服务间可能有依赖关系,如A依赖B,则当 B 故障时导致 A 也故障。 传递具有依赖性,如 A依赖 B,B 依赖 C,当 C 故障时导致 B 故障,也导致 A 故障。给出所有依赖关系以及当…...

html的表单标签(form)

目录标题1、表单标签主要有三大类&#xff1a;2、表单标签中常见的属性3、例子代码及结果4、注意&#xff1a;5、表单中特殊的属性表单标签可以用来数据交互&#xff0c;而前面学的六个标签只能发送不能接收。 表单标签的作用就是数据交互1、表单标签主要有三大类&#xff1a; …...

手把手教你部署ruoyi前后端分离版本

下载源码&#xff08;当前版本3.8.5&#xff09;RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 (gitee.com)创建数据库(一定要是这三个&…...

JUC并发编程 Ⅱ -- 共享模型之管程(上)

文章目录共享带来的问题临界区 Critical Section竞态条件 Race Conditionsynchronized 解决方案synchronized语法解决方案思考面向对象改进方法上的 synchronized线程八锁变量的线程安全分析成员变量和静态变量是否线程安全&#xff1f;局部变量是否线程安全&#xff1f;局部变…...

File类

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 ✈️推荐一款模拟面试&#xff0c;刷题神器…...

ModSecurity规则功能说明

ModSecurity规则功能说明 owasp规则: 第一部分&#xff1a;基础规则集 modsecurity_crs_20_protocol_violations.conf HTTP协议规范相关规则modsecurity_crs_21_protocol_anomalies.conf HTTP协议规范相关规则modsecurity_crs_23_request_limits.conf HTTP协议大小长度限制相…...

医学生考研考博太卷,一篇文章轻松助力上岸(一)

考研考博太卷了&#xff0c;卷不过&#xff0c;想没想过本科发一篇文章呢&#xff1f; 330分考研人淘汰390分考研人这个故事&#xff0c;大家应该都知道吧。 本专栏带你六个月内&#xff0c;搞定一篇文章&#xff0c;本科生发文章也很容易。 在卷考研的同时&#xff0c;再卷…...

操作系统(一): 进程和线程,进程的多种状态以及进程的调度算法

文章目录前言一、进程和线程1. 进程2. 线程二、进程和线程的区别(面试常问)三、进程调度算法3.1. 批处理系统3.2. 交互式系统3.2.1 时间片轮转3.2.2 优先级调度3.2.3 多级别反馈队列3.3. 实时系统四、进程的状态五、进程同步5.1 什么是进程同步5.2 进程同步应该遵循的几点原则前…...

【随笔】我迟到的2022年度总结:突破零粉丝,1个月涨粉1000+,2023年目标3万+

前言 我是21年12月注册的csdn&#xff0c; 作为用户平时看看文章&#xff0c;从未参与过写文章这件事。 但这一年的时间我见证了很多新号的崛起&#xff0c;有的号我平时关注比较多&#xff0c;看着他们从零粉丝突破了三万甚至五万的粉丝量。 在csdn上遇到了我的贵人&#x…...

SpringCloud-Netflix学习笔记13——Zuul路由网关

什么是Zuul? Zuul包含了对请求的路由和过滤两个最主要的功能。 其中路由功能负责将外部请求转发到具体的微服务实例上&#xff0c;是实现外部访问统一入口的基础&#xff0c;而过滤器功能则负责对请求的处理过程进行干预&#xff0c;是实现请求校验&#xff0c;服务聚合等功能…...

Hive 之 DDL操作

DDL 操作是用于操作对象和对象的属性&#xff0c;这种对象包括数据库本身&#xff0c;以及数据库对象&#xff0c;像&#xff1a;表、视图等等 1. 数据库 1.1 创建数据库 数据库在 HDFS 上的默认存储路径是 /user/hive/warehouse/*.db CREATE (DATABASE|SCHEMA) [IF NOT EX…...

2. SpringMVC 请求与响应

文章目录1. 请求映射路径2. 请求参数2.1 get 请求发送普通参数2.2 post 请求发送普通参数2.3 五种类型的参数传递2.4.1 普通参数2.4.2 POJO 数据类型2.4.3 嵌套 POJO 类型参数2.4.4 数组类型参数2.4.5 集合类型参数3. json 数据传输参数&#xff08;重点&#xff09;3.1 传输 j…...

leaflet 读取上传的geojson文件,转换为wkt文件(057)

第057个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中上传geojson文件,解析geojson文件并转换为WKT,并在地图上显示图片。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共128行)安装 @terraf…...

面试题-前端开发Vue篇(答案超详细)

文章目录 如何实现跨域?JSONP原理和缺点谈谈你对DOM的理解及常用的DOM API说说你对 Vue 的理解说说 Vue 的优缺点什么是虚拟 DOM请描述下 vue 的生命周期是什么vue 如何监听键盘事件?watch 怎么深度监听对象变化删除数组用 delete 和 Vue.delete 有什么区别watch 和计算属性有…...

PTA甲级-1010 Radix c++

文章目录Input Specification:Output Specification:Sample Input 1:Sample Output 1:Sample Input 2:Sample Output 2:一、题干大意![在这里插入图片描述](https://img-blog.csdnimg.cn/68d84d3ea86e4aaab002152ae8472e05.png#pic_center)二、题解要点三、具体实现总结Given a…...

【项目重构】第1次思考

回顾与反思 2022年~至今&#xff08;2023年2月&#xff09;&#xff0c;一共重构了2个项目。 第1个项目在重构的时候&#xff0c;总是想着把别人的代码copy过来&#xff0c;改一改&#xff0c;这就算重构好了。这样做效率太低&#xff0c;原因是前人写的代码不一定有很多注释…...

Java:SpringMVC的使用(2)

目录第十二章 REST风格CRUD练习12.1 搭建环境12.2 实现功能思路第十三章 SpringMVC消息转换器13.1 消息转换器概述13.2 使用消息转换器处理请求报文(1) 使用RequestBody获取请求体(2) 使用HttpEntity\<T>获取请求体及请求头13.3 使用消息转换器处理响应报文(1) 使用Respo…...

Elasticsearch7.8.0版本进阶——分布式集群(应对故障)

目录一、Elasticsearch集群的安装1.1、Elasticsearch集群的安装&#xff08;win10环境&#xff09;1.2、Elasticsearch集群的安装&#xff08;linux环境&#xff09;二、应对故障&#xff08;win10环境集群演示&#xff09;2.1、启动集群&#xff08;三个节点&#xff09;2.2、…...

【LeetCode】每日一题(2)

目录 题目&#xff1a;1138. 字母板上的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;1138. 字母板上的路径 - 力扣&am…...

软件设计师教程(六)计算机系统知识-操作系统知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;…...

Zookeeper下载安装与集群搭建

Zookeeper下载安装与集群搭建1.下载安装1.1 下载安装1.2 配置启动2.集群搭建2.1 搭建要求2.2 准备工作2.3 配置集群2.4 启动集群2.5 模拟集群异常1.下载安装 1.1 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的&#xff0c;它运行在JVM之上。需要安装JDK 7或更高版本。…...

Filter防火墙(8)

实验目的 1、了解个人防火墙的基本工作原理&#xff1b; 2、掌握Filter防火墙的配置。 预备知识防火墙 防火墙&#xff08;Firewall&#xff09;是一项协助确保信息安全的设备&#xff0c;会依照特定的规则&#xff0c;允许或是限制传输的数据通过。防火墙可以是一台专属的硬…...

Spring事务的传播级别——包你一文通

文章目录一、简单说明二、具体案例描述2.1.PROPAGATION_REQUIRED2.2.PROPAGATION_REQUIRED_NEW2.3.PROPAGATION_SUPPORTS2.4.PROPAGATION_NOT_SUPPORTED2.5.PROPAGATION_MANDATORY2.6.PROPAGATION_NEVER2.7.PROPAGATION_NESTED三、总结3.1、PROPAGATION_REQUIRED3.2、PROPAGATI…...

C语言(C预编译指令)

目录 1.undef 2.条件编译#ifdef,#else和#endif 3.#ifndef 4.#if和#elif 5.预定义宏 6.#line和#error 7.#pragma 1.undef #undef指令用于取消已定义的#define指令 #define LIMIT 400 #undef LIMIT 如果想使用一个名称但又不确定之前是否已经用过&#xff0c;为了安全起…...

JMeter 接口测试/并发测试/性能测试

Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。因为再做接口测试时可以设置线程组&#xff0c;所以也可做接口性能测试。本篇使用JMeter完成了一个…...

大家心心念念的RocketMQ5.x入门手册来喽

1、前言 为了更好的拥抱云原生&#xff0c;RocketMQ5.x架构进行了大的重构&#xff0c;提出了存储与计算分离的设计架构&#xff0c;架构设计图如下所示&#xff1a; RocketMQ5.x提供了一套非常建议的消息发送、消费API&#xff0c;并统一放在Apache顶级开源项目rocketmq-clie…...

(考研湖科大教书匠计算机网络)第四章网络层-第三节1:IPv4地址概述

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;IPv4地址概述二&#xff1a;IPv4地址表示方法&#xff08;1&#xff09;概述&#xff08;2&#xff09;8位无符号二进制数转十进制正整数&#xff…...

B站Python与OpenCV人脸识别项目超详细记录(对图片、视频、摄像头人脸的检测)

课程来源&#xff1a;一天搞定人脸识别项目&#xff01;学不会up直接下跪&#xff01;&#xff08;pythonopencv&#xff09;_哔哩哔哩_bilibili 图片来源&#xff1a;感谢王鹤棣先生友情出镜~ 环境配置详见&#xff1a; 在conda虚拟环境中安装OpenCv并在pycharm中使用_cond…...

【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…...

网站建设288/广州seo关键词优化费用

atitit.设计模式(2) -----查表模式/ command 总结 1. 应用场景&#xff1a; 1 1. 取代一瓦if else 1 2. 建设api rpc风格的时候儿. 1 3. 菜单是Command模式的一个典型实例&#xff0c; 1 4. 上下文中执行客户代码 1 5. 使用命令模式作为"CallBack"在面向对象系统中的…...

王爷王妃她红鸾心动了/网站做优化一开始怎么做

https://tech.meituan.com/2018/01/19/mybatis-cache.html https://blog.csdn.net/chi_666/article/details/107052896 一&#xff1a; 只能在【只有单表操作】的表上使用缓存 不只是要保证这个表在整个系统中只有单表操作&#xff0c;而且和该表有关的全部操作必须全部在一…...

企业网站建设专业精准丨 鸣远科技/网站收录优化

2017年最新整理出来的xocde打包IPA上架App Store的图文教程分享。 希望能帮助初次上架iOS APP开发者&#xff0c;快速掌握上架流程。 上架遇到问题&#xff0c;可以在帖子下面留言&#xff0c;楼主会一一解答。 分为8 步进行 1、申请iOS证书 2、导入证书到钥匙串 3、xcode配置i…...

最近重大新闻事件2021/太原seo招聘

源码地址&#xff1a;https://github.com/YANGKANG01/Spring-Boot-Demo 代码生成操作 在pom.xml文件中引入以下包&#xff1a; <!-- mybatisplus与springboot整合 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boo…...

石家庄商城网站制作/seo自学教程推荐

本问题已经有最佳答案&#xff0c;请猛点这里访问。我正在尝试加载正在使用的应用程序的条款和条件。 客户端向我提供了条款和条件的html文件&#xff0c;我没有任何类型的服务器访问权限。 因此从技术上讲&#xff0c;该应用需要随身携带该文件。 我已经完成了Web视图&#xf…...

网站开发背景怎么写/百度外推排名代做

HM9921/HM9924泛海微​原厂2.5A内置MOS降压恒流IC支持PWM调光 HM9921/HM9924 是一款高效率&#xff0c;稳定可靠 的高亮度 LED 灯恒流驱动控制芯片&#xff0c;内置 高精度比较器&#xff0c;固定关断时间控制电路&#xff0c; 恒流驱动电路等&#xff0c;特别适合大功率、多个…...