Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅析Nginx的工作模式及原理

浅析Nginx的工作模式及原理

作者头像
用户1263954
发布于 2018-01-30 06:42:56
发布于 2018-01-30 06:42:56
5.2K0
举报
文章被收录于专栏:IT技术精选文摘IT技术精选文摘

(微信公众号:IT技术精选文摘, 微信号:ITHK01, 欢迎订阅)

同Apache http server的Perfork工作模型类似,Nginx也有master,worker进程的概念。

第一,很显然,启动Nginx,就必须在端口启动监听服务,也就是套接字(ip+port),通常Nginx作为WEB SERVER和反向代理服务器都会在80端口监听。在LINUX上,要开启<1024端口的监听服务,必须用特权身份运行,也就是说master进程应该以root身份启动。

第二,那么master进程主要的职责是什么?

读取并验证配置信息。

创建,绑定,关闭套接字。

启动,终止,维护worker进程的个数。

master负责管理worker进程,这一点好理解,需要注意的是master在处理配置信息这一块。

假设nginx已经启动,我们更改配置文件后reload,如果这个配置文件语法有误,nginx会怎么做?

如果这个配置文件OK,nginx又会怎么做?

如果配置文件有误,reload后,master会提示配置错误,并不会影响请求的处理。

如果配置文件OK,reload后,什么时候生效呢?

Nginx支持热部署

如果主配置文件发生改变,那么并不会立刻影响到WORKER进程,而是MASTER等到WORKER进程的连接请求处理完毕后KILL掉这个WORKER进程,然后重新生成一个WORKER进程,这样这个WORKER进程就将以新的配置启动了。也就是说,老的连接用老的配置,新的连接用新的配置。重新加载配置文件不会中断正在处理的请求。

第三,worker进程是干嘛的?我们应该有多少个Worker进程?每一个Worker进程中有多少个线程?

在Nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环机制进行处理,而每个worker可以并行处理数千个的并发连接和请求。

Worker进程的个数,这个是可以配置的,但是一般而言,个数应该和CPU个数一致性,主要是为了CPU的进程切换。

那么Worker进程是做什么的?

接受,传入并处理来自客户端的连接;

提供反向代理等功能;

第四,worker进程如何处理请求的?

当一个请求来了,那么多个worker进程,谁去处理,还是几个一起处理?如何处理?

首先,要清楚的是,一个请求可以由一个worker进程处理并只能由这个worker进程完全处理。

Nginx在内部其实是维护了一个accept_mutex,其实就是一个锁,确保在某一时刻,一个请求只能被一个worker进程捕获。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。

Nginx采用了异步非阻塞事件驱动的方式来处理请求的,只要我们设置好WORKER进程个数与CPU的亲缘性绑定,那么就能减少CPU在进程间切换所花费的时间以及切换带来的进程的保存/恢复现场,同时,由于Nginx中一个worker里面只有一个线程,也避免了线程的上下文切换。

第五,异步/非阻塞/事件驱动

我们知道,很多请求来了,他们大多需要读写数据,发生IO请求,此时程序就会发生中断,如果此时我们一直等待IO调用结束,才继续工作,那么这种就是阻塞的,那么很显然很多请求来了,都处于等待状态,CPU就将处于空闲状态,为了提供高并发的能力,Nginx采用的是非阻塞的方式。如果发生IO中断,那么你去做你的事情,但是过一段时间来看看IO调用是否结束,这就是非阻塞:你可以做更多的事情,但是你得时不时的检查中断状态,带来的开销也不小。

为了更高效,Nginx利用了LINUX的EPOLL模型(其他系统类似):

EPOLL模型,提供一种事件驱动机制,它可以监控多个事件是否准备好了,如果准备好了,那么就放入EPOLL队列中。这种机制是异步的。通过这样,WORKER进程只需要循环处理EPOLL队列中的请求,我们只需要在请求间不断切换,而这种切换是不需要付出什么代价的,通过这种循环处理已经准备好的请求,从而Nginx可以高效的处理高并发的问题。

(完)

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术精选文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
8分钟带你深入浅出搞懂Nginx
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 架构图 上图基本上说明了当下流行的技术架构,其中Nginx有点入口网关的味道。 反向代理服务器? 经常听人说到一些术语,如反向代理,那么什么是反向代理,什么又是正向代理呢? 正向代理: 正向代理示意图 反向代理: 反向代理示意图 由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助V**来实现,这就是一个简单的正向代理
小小科
2018/05/04
9840
8分钟带你深入浅出搞懂Nginx
Nginx 架构浅析
作者:handsomeli,腾讯 IEG 后台开发工程师 1.Nginx 基础架构 nginx 启动后以 daemon 形式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。如下图所示: master与worker nginx 是由一个 master 管理进程,多个 worker 进程处理工作的多进程模型。基础架构设计,如下图所示: 基础架构设计 master 负责管理 worker 进程,worker 进程负责处理网络事件。整个框架被设计为一种依赖事件驱动、异步、非
腾讯技术工程官方号
2021/04/13
2.5K0
Nginx 工作原理简介
在了解Nginx工作原理之前,我们先来了解下几个基本的概念 以及常见的I/O模型。
授客
2023/12/18
1.3K0
Nginx 工作原理简介
【Nginx学习笔记】-初识Nginx
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
DevOps在路上
2023/05/16
6310
【Nginx学习笔记】-初识Nginx
nginx 多进程架构详解
一、进程模型 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的。那么nginx究竟是怎么样的呢?这一节我们先来初识一下nginx框架吧。
后端技术探索
2018/08/09
2.9K0
Nginx技术总结之三——Nginx多进程IO模型
首先,对于每个 worker 进程来说,独立的进程不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。 其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序漏洞导致异常退出,这样会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
剑影啸清寒
2020/07/20
1.2K0
高并发 Nginx + lua是如何抗住的
提到高并发或者抗压力,有这种高qps经验的同学第一反应大都是Nginx + lua + Redis,网上也满天非那种高并发架构方案大都是这种,但是Nginx + lua 来做接入层到底是怎么抗住压力的呢?
邹志全
2019/07/31
1.4K1
Nginx为什么快到根本停不下来?
Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。本文从底层原理分析 Nginx 为什么这么快!
Bug开发工程师
2020/03/03
6020
Nginx为什么快到根本停不下来?
Nginx 架构初探
高度模块化的设计是 Nginx 的架构基础。Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。
Bug开发工程师
2019/07/15
4020
Nginx 架构初探
【NGINX入门】14.Nginx原理深度解析
Web 服务器主要为用户提供服务,必须以某种方式,工作在某个套接字上,一般Web服务器在处理用户请求时,一般有如下三种方式:
辉哥
2021/02/05
2.5K0
【NGINX入门】14.Nginx原理深度解析
从Nginx、Apache工作原理看为什么Nginx比Apache高效!
Nginx才短短几年,就拿下了Web服务器大壁江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于Httpd,甚至能轻松解决C10K问题。
Java后端技术
2018/08/09
9780
浅谈 Nginx 服务器的内部核心架构设计
Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以其高性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名。
芋道源码
2019/06/21
5690
浅谈 Nginx 服务器的内部核心架构设计
高并发应用场景的解决方案(一) - Nginx
在现今的企业级应用中,功能丰富的Nginx,作为HTTP服务器,作为反向代理服务器,作为邮件服务器......同时,也支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。因此,经常会用到Nginx服务,也时常会碰到Nginx因高并发导致的性能瓶颈问题。下面,小编就从理解到深入,对Nginx作一个稍微详细的介绍和说明。
23号杂货铺
2019/09/27
2.5K0
高并发应用场景的解决方案(一) - Nginx
[日常]nginx与网络事件模型
Nginx 的特点: 1.处理静态文件 2.反向代理加速 3.fastCGI,简单的负载均衡和容错 4.模块化的结构 5.分阶段资源分配技术,使得它的 CPU 与内存占用率非常低,保持 10,000 个没有活动的连接,它只占 2.5M 内存 6.支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 7.采用 master-slave 模型,能够充分利用 SMP 的优势,且能够减少工作进程在磁盘 I/O 的阻塞延迟。当采用 select()/poll() 调用时,还可
唯一Chat
2019/09/10
6530
Nginx-详解其原理
  在介绍Nginx的进程模型之前我们先来给大家解释下一些常见的名词,这能辅助我们更好的了解Nginx的进程模型。作为Web服务器,设计的初衷就是为了能够处理更多的客户端的请求,一般来说,完成并行处理请求工作有三种方式可以选择,多进程、多线程、异步方式。
用户4919348
2020/05/25
8660
Nginx-详解其原理
Nginx 服务器的内部核心架构设计
Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以其高性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名。
2019/06/28
7380
通俗易懂的Nginx工作原理
作者:Rick617原文:https://www.jianshu.com/p/6215e5d24553
Bug开发工程师
2019/05/16
14.2K1
通俗易懂的Nginx工作原理
Nginx学习-架构
后面就先按照这个图所展示出来的内容对Nginx的架构进行一次梳理,文中所涉及到的内容,主要都是针对Linux系统的。
信安本原
2020/03/08
4420
渐进深入理解Nginx
正向代理也是大家最常接触的到的代理模式,那究竟什么是正向代理呢?我们都知道Google在国内是无法正常访问的,但是某些时候我们由于技术问题需要去访问Google时,我们会先找到一个可以访问Google的代理服务器,我们将请求发送到代理服务器,代理服务器去访问Google,然后将访问到的数据返回给我们,这样的过程就是正向代理。
创译科技
2019/08/26
8340
Nginx工作原理、优化及启动监控项
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
菲宇
2019/06/12
1.1K0
Nginx工作原理、优化及启动监控项
相关推荐
8分钟带你深入浅出搞懂Nginx
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档