[TOC] ***** # 1、Nginx底层的流程 客户端发送请求首先到nginx的master,master相当于一个管理员,管理员得到任务之后,把任务给下面的worker,worker通过争抢机制得到这个任务,然后worker通过反向代理用tomcat完成我们具体的操作,返回给客户端。 ![](https://img.kancloud.cn/ae/53/ae53df93e1428e818f19ff429b16f65b_677x363.png) ## 2、 worler如何进行工作 ![](https://img.kancloud.cn/46/65/46650d01a3d09a444522a9d772054058_835x407.png) ## 3、一个master和多个worker、好处 可以使用 nginx -s reload热部署,利用 nginx进行热部署操作 ***** 1. 在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程,包括:接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程退出时(非正常),启动新的worker进程。基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。 worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。 2. 当master接收到重新加载的信号会怎么处理(./nginx -s reload)?,master会重新加载配置文件,然后启动新的进程,使用的新的worker进程来接受请求,并告诉老的worker进程他们可以退休了,老的worker进程将不会接受新的,老的worker进程处理完手中正在处理的请求就会退出。 3. worker进程是如何处理用户的请求呢?首先master会根据配置文件生成一个监听相应端口的socket,然后再faster出多个worker进程,这样每个worker就可以接受从socket过来的消息(其实这个时候应该是每一个worker都有一个socket,只是这些socket监听的地址是一样的)。当一个连接过来的时候,每一个worker都能接收到通知,但是只有一个worker能和这个连接建立关系,其他的worker都会连接失败,这就是所谓的惊群现在,为了解决这个问题,nginx提供一个共享锁accept\_mutex,有了这个共享锁后,就会只有一个worker去接收这个连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。 [https://www.cnblogs.com/chenjfblog/p/8715580.html](https://www.cnblogs.com/chenjfblog/p/8715580.html)