深入理解 Nginx 工作原理:Master-Worker 架构与性能优化
目录
前言
Nginx是一个高性能的开源 Web 服务器,以其卓越的性能、高并发处理能力和可扩展性而闻名。其独特的工作方式及架构设计为 Web 服务器领域带来了创新。本文将深入探讨 Nginx 的工作原理,重点关注其 Master-Worker 架构以及性能优化策略,帮助大家更好地理解 Nginx 如何处理并发请求并实现高效的网络服务。
1 Nginx 的 Master-Worker 架构
Nginx 采用了 Master-Worker 的工作模式,主要由两部分组成:Master 进程和多个 Worker 进程。当启动 Nginx 时,Master 进程负责加载配置文件、管理 Worker 进程以及监听信号。而每个 Worker 进程则独立处理客户端请求,采用争抢的方式来工作。
Master-Worker 架构示意图
通过命令 ps -ef | grep nginx
可以观察到 Master 和 Worker 进程的存在,展现了 Nginx 的架构特点。
2 Worker 进程的工作原理
每个 Worker 进程独立处理请求,通过争抢的方式来工作。这种设计使得每个进程都是独立的,无需加锁,降低了系统负担。即使一个 Worker 进程异常退出,其他进程依然在工作,服务不会中断。Master 进程能够快速重启新的 Worker 进程,提高了系统的稳定性。
Worker 进程争抢任务示意图
3 Master-Worker 架构的优势
Master-Worker 架构以其独特的设计带来了多重优势。
3.1 热部署的便利性
Nginx 的 Master-Worker 架构支持热部署,允许在不中断现有服务的情况下重新加载配置或更新程序。通过 nginx -s reload
命令,管理员能够动态地应用新的配置或软件更新,确保系统的持续可用性。这种动态性质极大地方便了系统的管理和维护,使得运维变得更为灵活高效。
3.2 进程间独立性
每个 Worker 进程在 Nginx 的架构中都是相互独立的实体。这种独立性保证了各个 Worker 进程之间不会相互影响,也降低了单个进程异常退出对整体服务的影响。即使某个 Worker 进程出现问题或崩溃,其他进程仍在运行,系统能够保持部分服务的可用性,有效地降低了系统崩溃风险。
3.3 系统稳定性和容错性提升
Master-Worker 架构为系统带来了更高的稳定性和容错性。Worker 进程异常退出或因为某些原因停止工作时,Master 进程能够快速检测到并重新启动新的 Worker 进程,减少了系统宕机或服务中断的可能性。这种容错能力有助于保持系统的持续稳定运行,确保了服务的高可用性。
3.4 系统风险降低
由于每个 Worker 进程都是相互独立的,这种设计降低了系统出现故障或问题时的风险。异常退出的进程不会影响其他进程的运行,从而提高了系统整体的鲁棒性和可靠性。同时,这种独立性也为系统的问题排查和调试提供了便利,有利于快速定位和解决故障。
Master-Worker 架构的这些优势使得 Nginx 在处理高并发请求、保障服务稳定性和应对系统故障时具备了良好的性能和可靠性,成为众多互联网服务的首选。
4 Worker 数量的设置
设置合适数量的 Worker 对于 Nginx 的性能发挥至关重要。一般建议,将 Worker 数量设置为与服务器 CPU 核心数相等,这样有助于最大程度地利用每个 CPU 核心的性能。
合理设置 Worker 数量的优势在于有效地分配并利用服务器的计算资源。如果 Worker 数量过少,可能无法充分利用服务器的多核心性能,造成系统资源浪费。反之,如果设置过多的 Worker,可能会导致过多的上下文切换和资源竞争,增加系统负载,影响性能表现。
适当匹配 Worker 数量和 CPU 核心数能够使得 Nginx 在处理并发请求时更高效,确保系统的稳定性和性能表现。这种平衡性的设置可以使 Nginx 在运行过程中更有效地分配任务给每个 Worker 进程,最大程度地发挥服务器的性能优势,提高系统的响应速度和并发处理能力,从而确保系统的高可用性。
5 Worker 连接数(worker_connections)
Worker 连接数表示每个 Worker 进程所能建立连接的最大值。最大并发连接数为 Worker 数量乘以 Worker 连接数。不同类型的请求(静态资源请求或反向代理)会对并发连接数有不同的影响,需要根据具体情况进行调整。
计算最大并发连接数公式
- 对于普通的静态资源访问:最大并发数 = Worker 数量 × Worker 连接数 / 2
- 对于支持 HTTP 1.1 的浏览器:最大并发数 = Worker 数量 × Worker 连接数 / 2
- 对于作为反向代理服务器:最大并发数 = Worker 数量 × Worker 连接数 / 4
结语
Nginx 以其高效的 Master-Worker 架构和优越的性能表现成为许多网络服务的首选。深入了解其工作原理并合理优化配置,能够最大限度地发挥其性能优势,确保系统的稳定性和高可用性。本文介绍了 Nginx 的 Master-Worker 架构,探讨了 Worker 进程的工作方式、Master-Worker 架构的优势以及如何设置 Worker 数量和连接数,旨在帮助大家更好地理解 Nginx 的工作原理及性能优化策略。
相关文章:

微服务全做错了!谷歌提出新方法,成本直接降9倍!
一位DataDog的客户收到6500万美元的云监控账单的消息,也再次让业界无数人惊到了。事实上有些团队在将集中式单体应用拆分为微服务时,首先进行的往往不是建立领域模型,而只是按照业务功能将原来单体应用的一个软件包拆分成多个所谓的“微服务”软件包,而这些“微服务”内的代码高度耦合,逻辑边界不清晰,长期以来,不管大厂还是小厂,微服务都被认为是云原生服务应用程序架构的事实标准,然而2023,不止那位37signals的DHH决心下云,放弃微服务,就连亚马逊和谷歌等这些云巨头,正在带头开始革了微服务的命。

java面试题:分布式和微服务的区别
分布式架构解决的是如何将一个大的系统划分为多个业务模块这些业务模块会分别部署到不同的机器上,通过接口进行数据交互的问题。微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。分布式架构是将一个大的系统划分为多个业务模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。

配置nginx+keepalived高可用代理数据库ip端口
需求:配置nginx+keepalived高可用反向代理数据库ip端口(数据库服务器无法增加新SCAN IP或者需要隐藏数据库IP的情况下适用)本机ip为:192.168.20.10和192.168.20.11。2.任意节点关机或重启系统,浮动ip也会自动漂移到另外节点。1.任意节点停nginx:浮动ip会自动漂移到另外节点。安装依赖包和nginx和keepalived。浮动IP为:192.168.20.20。配置keepalived.conf。两台centos7.9。

C程序的内存空间布局(栈、堆、数据区、常量区、代码区)
较详细的介绍了栈、堆、数据区、常量区、代码区

如何在Nginx中配置防盗链?
防盗链是一种防止网站资源被非法下载的技术。当用户尝试直接访问一个受保护的资源时,服务器会返回一个403 Forbidden错误,提示用户该资源受到保护,不能直接访问。这样可以避免用户通过搜索引擎或其他方式获取到未经授权的资源。通过以上步骤,我们可以在Linux系统中的Nginx Web服务器中使用Shell脚本实现防盗链的配置。这种方法可以有效地保护网站资源不被非法下载,提高用户体验,同时防止恶意攻击。在实际项目中,我们可以根据实际需求灵活配置受保护资源的URL和处理方式。

这些年背过的面试题——架构设计篇
对技术人来说,面试成功的道路只有一条,就是好好准备技术基础。本文是面试系列文章架构设计篇,作者把自己的八股文和一些经验总结汇总在一起,供大家参考。

高级架构师是如何设计一个系统的?
作为一名高级架构师,我是如何设计一个系统的

深入浅出:Golang内存逃逸机制与性能优化技巧
内存逃逸发生在编译期间,当编译器判断一个变量的生命周期超出了其当前作用域,它会将该变量分配到堆上,而非栈上。这种情况虽然保证了程序的正确性,但会增加垃圾回收的负担,从而影响程序性能。通过本文的深入探讨,我们了解了Golang内存逃逸的基本原理,以及它是如何影响程序性能的。我们探讨了内存逃逸的常见场景,并通过具体的代码示例展示了这些问题的出现和解决方法。最重要的是,我们学习了一系列性能优化技巧,包括数据结构优化、减少不必要的指针使用、利用栈空间、使用内存池,以及定期进行性能分析。

浅谈6种流行的API架构风格
API在现代软件开发中扮演着重要的角色,它们是不同应用程序之间的桥梁。编写业务API是日常开发工作中最常见的一部分,选择合适的API框架对项目的成功起到了至关重要的作用。本篇文章将浅谈一下当前6种流行的API架构风格的优点、缺点以及适用场景。这些 API 架构风格都各有优点和适用场景,您可以根据具体需求选择适合的架构风格来构建和设计 API。

CentOS 7 设置 Jar包、MinIO、Nginx 开机自启动
根据需要,自己修改 Description 和 ExecStart 的内容即可(ExecStart后面的java命令需要全路径)ExecStart 服务运行执行的命令,放上面创建的脚本位置。[Install] 服务安装的相关设置,可设置为多用户。如果用 yum install 命令安装的,如果使用源码手动编译的则需要手动创建。文件,xxx 就是自定义的服务名称。After:设置在某个服务启动后启动。Description:服务的描述。可以使用这个命令来查看服务启动日志。里面的环境变量是必须的,将。

Nginx实战 | 高性能HTTP和反向代理神器Nginx前世今生,以及它的“繁花之境”
Nginx 的历史可以追溯到 1990 年代末期,当时互联网开始迅速发展,传统的 HTTP 服务器如 Apache 开始显得力不从心,无法满足日益增长的访问量和并发请求。Nginx 的设计理念是追求极高的性能和稳定性,同时还具有较低的内存消耗和资源占用,这使得它能够处理大量并发请求,非常适合于需要处理高负载的服务器环境。通过这些测试和优化方法,你可以了解 Nginx 的性能瓶颈,并采取相应的措施来提高其性能。Nginx 的测试和优化可以通过多种方式进行,包括负载测试、性能测试、配置优化和代码级优化。

【技术科普】什么是达芬奇架构?有什么优势?
芯片架构通常包括处理器核心、内存、输入输出接口等组成部分,这些部分的设计对芯片性能和功耗有着直接的影响,世界上主流的芯片架构主要包括x86、ARM、PowerPC和RISC-V等。基于“达芬奇架构”,英码科技推出了多款专业图像处理边缘计算盒子,具有性能稳定可靠、高性价比的优势,算力覆盖2~10.4TOPS,支持4~10路视频结构化,可满足智慧工地、智慧交通、智慧应急等轻量化场景的应用需求。达芬奇架构同时支持多种精度计算,支撑训练和推理两种场景的数据精度要求,实现AI的全场景需求覆盖。

Java 19的未来:新特性、性能优化和更多
Java 19的未来:新特性、性能优化和更多

分布式系统架构设计之分布式数据存储的备份恢复和监控故障排查
架构师通过设计和实施数据备份和恢复策略,可以最大程度地保障分布式系统在面对数据损失、硬件故障、灾难性事件等情况下的稳定性和可用性。在分布式数据存储中,数据备份和恢复是保障数据存储系统可靠性和容灾性的重要组成部分。通过合理的监控和故障排查策略,可以确保分布式数据存储系统在运行过程中保持高可用性、高性能,并且能够及时应对潜在的故障情况。在分布式系统中,对数据存储进行有效的监控和出现问题后故障排查策略是确保系统稳定性和性能可靠性的关键。

【微服务】springboot整合skywalking使用详解
springboot整合skywalking

在云计算环境中,如何利用 AI 改进云计算系统和数据库系统性能
2023年我想大家讨论最多,热度最大的技术领域就是 AIGC 了,AI绘画的兴起,ChatGPT的火爆,在微软背后推手的 OpenAI 大战 Google几回合后,国内各种的大语言模型产品也随之各家百花齐放,什么文心一言、通义千问、科大讯飞的星火以及华为的盘古等等,一下子国内也涌现出几十种人工智能的大语言模型产品。ChatGPT 爆火之后,你是否有冷静的思考过 AIGC 的兴起对我们有哪些机遇与挑战?我们如何将AI 应用到我们现有的工作学习中?_aigc k8s

前端如何性能优化
优化 DOM 操作:减少频繁的 DOM 操作,可以将操作集中在一起,或者使用 DocumentFragment 进行离线操作再一次性插入 DOM。延迟执行脚本:将 JavaScript 脚本放在页面底部,或者使用 async 或 defer 属性,使得脚本不会阻塞页面的加载和渲染。延迟加载 JavaScript:将不必要的 JavaScript 代码延迟加载,只在需要时再加载和执行,提高页面渲染速度。懒加载:延迟加载页面中的图片、视频等非关键资源,只有当用户滚动到可见区域时再加载,减少初始加载时间。

nginx下载安装 | mac | 前端项目在nginx上运行
大家好,我是星恒,今天给大家带来的是nginx的安装配置,以及如何在nginx运行前端项目的教程,话不多说,我们直接开始。

Win系统修改Nginx配置结合内网穿透实现远程访问多个Web站点
登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。接下来,我们通过强大的且稳定的内网穿透工具cpolar,将本地nginx服务暴露至公网环境,以实现穿透多个站点端口需求,无需公网IP,也不用设置路由器。提示更新隧道成功,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新为保留成功的二级子域名,将其复制下来。来访问两个站点,测试访问成功,现在该公网地址不会随机变化了。

Linux配置nginx开机自启
1.先创建开机自启脚本。3.启动nginx服务。

讲解nginx.pid“ failed (2: The system cannot find the file specified
该脚本首先检查Nginx进程是否在运行,如果未运行则尝试重新生成"nginx.pid"文件,并启动Nginx服务。然后,脚本会启动Nginx服务。通过使用该脚本,你可以自动处理"nginx.pid" failed 错误,并重新生成所需的"nginx.pid"文件。nginx.pid 文件是Nginx Web服务器在运行过程中生成的一个文件,用于存储Nginx主进程的进程ID(PID)。它表明Nginx无法找到指定的"nginx.pid"文件,这个文件用于存储Nginx主进程的进程ID(PID)。

linux配置nginx开机自启&nginx部署与systemctl控制启动&/etc/systemd/system 和 /lib/systemd/system 的区别
目录/lib/systemd/system 以及/usr/lib/systemd/system 其实指向的是同一目录,在/目录下执行命令lltotal 28该目录中包含的是软件包安装的单元,也就是说通过 yum、dnf、rpm 等软件包管理命令管理的 systemd 单元文件,都放置在该目录下。/etc/systemd/system/(系统管理员安装的单元, 优先级更高)在一般的使用场景下,每一个 Unit(服务等) 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit。

nginx常用操作命令
都启动了同一个Nginx进程。不一样的是:1、Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询。2、Systemd更方便作服务管理,启动管理Nginx更佳方便。3、Systemd可以作开机服务管理,让服务跟随系统启动。

【redis】Redis 架构演化之路
里面大致说了redis的架构演进。开始学redis架构的时候,总是感觉架构好多,迷迷糊糊的,但是你知道Redis 架构演化之路之后,就明白了前因后果,这样学习更加深入以及搞笑。这篇文章我想和你聊一聊 Redis 的架构演化之路。现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是如何稳定、高性能地提供服务的?如果你对 Redis 已经有些了解,肯定也听说过。

【Harmony】鸿蒙操作系统架构
鸿蒙操作系统以其微内核架构、分布式能力和全场景覆盖的设计理念,成为当前技术领域一颗璀璨的明星。其架构设计满足了当前多样化的设备需求,注重了设备之间的协同工作和开发者的友好体验。随着鸿蒙操作系统的不断演进和生态系统的丰富,我们对于这个在全球范围内掀起一场科技变革的产物充满期待。在未来的智能互联时代,鸿蒙操作系统必将发挥更为重要的作用,引领技术的潮流。_鸿蒙系统的架构

Nginx反向代理跳过国内备案(以宝塔面板为例)
Nginx代理跳过大陆备案验证,需要两台服务器,一台已备案或者免备案,一台国内主力服务器放你的项目。B服务器在配置文件里设置listen监听端口号。先把域名解析到A服务器。然后在A服务器里配置。

Nginx基础篇:Nginx搭建、Nginx反向代理、文件服务器部署配置。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。

Nginx按指定格式记录访问日志
其实我们在用常用的web服务器上都有这项功能,我们这里用Nginx举例,我们的访问日志一般正常都是什么设备在什么地址访问了我们的什么资源,后端服务器的响应时间是多少,客户端请求处理的总时间是多少;一般我们作为开发人员关注的日志只是在应用程序层面的,我们称它为应用程序日志,访问日志和错误日志可以被认为是应用程序日志的一部分,因为它们都与应用程序的运行状态和用户访问行为有关。:代表User-Agent HTTP头部,指示发起请求的客户端的用户代理(例如,浏览器)。:代表发起请求的客户端的IP地址。

本地Nginx服务搭建结合内网穿透实现多个Windows Web站点公网访问
文章浏览阅读1.1k次,点赞96次,收藏91次。访问http://127.0.0.1:9200/登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑。接下来,我们通过强大的且稳定的内网穿透工具cpolar,将本地nginx服务暴露至公网环境,以实现穿透多个站点端口需求,无需公网IP,也不用设置路由器。提示更新隧道成功,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新为保留成功的二级子域名,将其复制下来。修改隧道信息,将保留成功的二级子域名配置到隧道中。

Nginx 核心配置文 nginx.conf介绍
文章浏览阅读38次。我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。在Nginx的配置文件中,默认有两行配置:用来配置Nginx响应前端请求默认的MIME类型。语法默认值位置在default_type之前还有一句。