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 的模块是互相独立的,低耦合高内聚。