Nginx 启动之后,在 Linux 系统中有两个进程,一个为 master,一个为 worker。master 作为管理员不参与任何工作,只负责给多个 worker 分配不同的任务(worker 一般有多个)。
ps -ef |grep nginxroot 20473 1 0 2019 ? 00:00:00 nginx: master process /usr/sbin/nginxnginx 4628 20473 0 Jan06 ? 00:00:00 nginx: worker processnginx 4629 20473 0 Jan06 ? 00:00:00 nginx: worker process

worker 是如何工作的? master,管理员收到请求后会将请求通知给 worker,多个 worker 以争抢的机制来抢夺任务,得到任务的 worker 会将请求经由 tomcat 等做请求转发、反向代理、访问数据库等。
一个 master 和多个 worker 使得 Nginx 可以使用 nginx -s reload 进行热部署。
每个 worker 是独立的进程,如果其中一个 worker 出现问题,其它 worker 是独立运行的,会继续争抢任务,实现客户端的请求过程,而不会造成服务中断。
Nginx 和 Redis 类似,都采用了 I/O 多路复用机制,每个 worker 都是一个独立的进程,每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,每个 worker 的线程可以把一个 CPU 的性能发挥到极致,因此,worker 数和服务器的 CPU 数相等是最为适宜的。
reload 重载配置文件的流程:
master 进程发送 HUP 信号( reload 命令);master 进程检查配置语法是否正确;master 进程打开监听端口;master 进程使用新的配置文件启动新的 worker 子进程;master 进程向老的 worker 子进程发送 QUIT 信号;worker 进程关闭监听句柄,处理完当前连接后关闭进程;Nginx 的内部结构是由核心部分和一系列的功能模块所组成。这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展。Nginx 的模块是互相独立的,低耦合高内聚。