Nginx 原理以及参数配置

Nginx 的 master-worker 机制

  1. 一个 Nginx 是由一个 master 主进程,与多个 worker 进程组成。
  2. master 进程负责监听客户端发来的请求。
  3. 而 worker 进程主要负责争抢 master 进程接收到的连接数,最后有 worker 进程负责将请求转发到相应的 Tomcat(负载均衡)。对于静态资源,worker则不需要转发请求,直接返回静态资源给客户端。
  1. 客户端向 Nginx 发起请求;
  2. 由 master 进程监听客户端发来的请求;
  3. master 监听到客户端发来的请求之后,会通知 worker。worker 负责争抢请求;
  4. 如果请求是静态资源,则 worker 会直接将静态资源返回给客户端;如果是动态资源,worker 则会将资源分发给 tomcat 处理;这种争抢策略的好处是:可以极大的提高 Nginx 的并发效率


注:当 worker 的数量与 CPU 数量一致时 Nginx 的效率最高。因为每一个 worker 就是一个进程,worker 的数量与 cpu 一致时,每一个 worker 都会绑定一个 cpu。过少则会空出 cpu,使多余 cpu 空闲;过多则会导致 cpu 来回切换进程,消耗时间;

master-worker 机制的好处

  1. 首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。
  2. 其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程。
  3. 当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

worker 的数量

  1. Nginx 同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
worker_processes 4

#work绑定cpu(4 work绑定4cpu)。
worker_cpu_affinity 0001 0010 0100 1000

#work绑定cpu (4 work绑定8cpu中的4个) 。
worker_cpu_affinity 00000001 00000010 00000100 00001000

Nginx 连接数问题

worker_processes 4;
worker_connections 1024;
  1. Nginx 能够支持的最大链接数为:worker_processes * worker_connections
  2. Nginx 所能支持的最大并发数:
    静态资源:worker_processes * worker_connections / 2
    动态资源:worker_processes * worker_connections / 4

因为,Nginx 中 worker 进程是采用异步非阻塞

  1. 当 master 监听到 w请求后,worker 会与 master 建立一次链接之后见断开。
  2. 如果请求的是静态资源,则 worker 会再次与 master 建立链接返回静态资源给客户端后断开链接
    所以对于静态资源所能支持的最大并发数为:worker_processes * worker_connections / 2;
  3. 如果是动态链接,worker 还有与 tomcat 建立两次链接
    所以动态链接所能支持的最大并发数为:worker_processes * worker_connections / 4;
posted @   ayi8  阅读(75)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示