进程
master进程
Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控 worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程
基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器CPU核数一致,这里面的原因与Nginx的进程模型以及事件处理模型是分不开的。
过程
1.启动--Nginx在启动时,会解析配置文件,得到需要监听的端口与IP地址,
2.初始化-然后在Nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的IP地址端口,再listen),
3.多进程--然后再fork(一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(work进程) )出多个子进程出来,然后子进程会竞争accept新的连接。
4.连接--此时,客户端就可以向Nginx发起连接了。当客户端与Nginx进行三次握手,与Nginx建立好一个连接后,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建Nginx对连接的封装,即ngx_connection_t结构体。
5.交换--接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,Nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
应用
在近期一些项目的开发过程中,主要是使用Nginx和Tomcat来搭建高性能负载均衡集群,
即使用Nginx的反向代理功能来实现请求的分发,关于Nginx和Tomcat的组合使用,不在这里重复造轮子