Nginx进程模型Nginx服务器,正常运行时:多进程:一个Master进程,多个Worker进程Master进程:管理Worker进程对外接口:接收外部操作(信号)内部转发:根据不同的外部操作,通过信号管理WorkerMonitoring:监控worker进程的运行状态,worker进程异常终止后自动重启worker进程。Worker进程:所有Worker进程都是平等的。工艺加工;NumberofWorkerprocesses:配置在nginx.conf中,一般设置为核心数,以充分利用CPU资源。同时避免进程过多,避免进程争抢CPU资源,增加上下文切换的损失。思考:请求连接到Nginx,Master进程负责处理转发?如何选择哪个Worker进程来处理请求?请求的处理结果是否还要经过Master进程?HTTP连接建立和请求处理过程:Nginx启动时,Master进程,加载配置文件Master进程,初始化监听socket的Master进程,fork出多个Worker进程Worker进程,竞争新的连接。获胜者通过三次握手建立Socket连接并处理请求。Nginx高性能、高并发:Nginx采用:多进程+异步非阻塞模式(IO多路复用epoll)请求的完整过程:建立连接读请求:解析请求、处理请求、响应的完整过程到request,对应底层是:读写socket事件Nginx事件处理模型request:Nginx中的HTTP请求。基本HTTPWebServer工作模式:接收请求:逐行读取请求行和请求头,判断该段有请求体后,读取请求体处理请求,返回响应:根据处理结果,生成相应的HTTP请求(响应行、响应头、响应体)Nginx也是同样的套路,整体流程是一样的。模块化架构Nginx的模块按照功能基本可以分为以下几种:事件模块:构建独立于操作系统的事件处理机制框架,提供对特定事件的处理。包括ngx_events_module、ngx_event_core_module和ngx_epoll_module等。nginx使用哪个事件处理模块取决于具体的操作系统和编译选项。phasehandler:这类模块也直接称为handler模??块。主要负责处理客户端请求并生成响应内容,如ngx_http_static_module模块,负责处理客户端的静态页面请求,并准备相应的磁盘文件用于响应内容输出。outputfilter:也称为filter模块,主要负责对输出内容进行处理,可以对输出进行修改。例如,可以实现为所有输出的html页面添加预定义的footbar,或者替换输出图片的URL等工作。upstream:upstream模块实现反向代理的功能,将真正的请求转发给后端服务器,从后端服务器读取响应,返回给客户端。upstream模块是一个特殊的handler,只是响应内容并不是自己实际生成的,而是从后端服务器读取的。load-balancer:负载均衡模块,实现了特定的算法。在众多后端服务器中,选择一台服务器作为某个请求的转发服务器。
