一、进程模型
Nginx采用多线程模型,单Master多worker,由Master处理外部信号、配置文件的读取及worker的初始化,worker进程采用单线程、非阻塞的事件模型(EventLoop,事件循环)来实现端口的监听以及客户端请求的处理和响应,同时Worker还要处理来自Master的信号,由于worker采用单线程处理各种事件,所以一定要保证住循环是非阻塞的,否者或大大降低worker的响应能力。
二、Nginx处理Http请求的过程
NGX_HTTP_POST_READ_PHASE ------------------------- 读取请求
NGX_HTTP_SERVER_REWRITE_PHASE ------------------------- 这个阶段主要是处理全局(server block)的rewrite
NGX_HTTP_FIND_CONFIG_PHASE ------------------------- 这个阶段主要是通过uri来查找对应的location,然后根据loc_conf设置相应变量
NGX_HTTP_REWRITE_PHASE ------------------------- 这个阶段主要是处理location的rewrite
NGX_HTTP_POST_REWRITE_PHASE ------------------------- postrewrite,这个阶段主要是进行一些校验及收尾工作,以便交给后面的模块
NGX_HTTP_PREACCESS_PHASE ------------------------- 类似流控这种类型的access就在此阶段,即它主要是进行一些比较粗颗粒度的access
NGX_HTTP_ACCESS_PHASE ------------------------- 类似存取控制,权限验证就放在这个阶段,一般来说处理动作是交给下面的模块做的,这个主要是做一些细粒度的access
NGX_HTTP_POST_ACCESS_PHASE ------------------------- 一般来说,当上面的access模块得到access_code之后就会由这个模块根据access_code来进行操作。
NGX_HTTP_TRY_FILES_PHASE ------------------------- try_files模块,就是对应配置文件中的try_files指令,可接收多个路径作为参数,当前一个路径的资源无法找到,则自动查找下一个路径。
NGX_HTTP_CONTENT_PHASE ------------------------- 内容处理模块
NGX_HTTP__LOG_PHASE ------------------------- log模块