一、Nginx 架构图

二、Nginx 架构与核心模块 - 图1

二、架构说明

**

  • nginx 启动时,master 不处理网络请求,主要负责调度工作进程,也就是图示的三项:加载配置、启动工作进程及非停升级。所以,nginx 启动以后,查看操作系统的进程列表,我们就能看到至少有两个nginx 进程(一个 master,一个 worker)。


  • 服务器实际处理网络请求及响应的是工作进程(worker),在类 unix 系统上,nginx 可以配置多个worker,而每个 worker 进程都可以同时处理数以千计的网络请求。但是并不是 worker 越多越好,最多 worker 的数量与 CPU 核心数量相等,但是通常会指定 CPU 的核心数量来绑定 worker,因为全部沾满 CPU 核心数量,反而会由于 CPU 频繁切换影响性能


  • 模块化设计,nginx 的 worker,包括核心和功能性模块,核心模块负责维持一个运行循环(run-loop),执行网络请求处理的不同阶段的模块功能,如网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等。而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特定功能的服务器。


  • 事件驱动、异步及非阻塞,可以说是nginx得以获得高并发、高性能的关键因素,同时也得益于对Linux、Solaris 及类 BSD 等操作系统内核中事件通知及 I/O 性能增强功能的采用,如 kqueue、epoll 及event ports。


三、Nginx 核心模块

image.png