nginx 工作流程

     NGINX 把http请求处理流程划分为11个阶段,逻辑细分,以模块为单位进行处理。各个阶段可以包含多个http模块,每个阶段以流水线的形式处理请求。这样的分层处理模式与计算机网络的7层模式类似,每个模块以正交的方式处理请求,带来了低耦合,模块之间的低耦合带来灵活性。

  1. NGX_HTTP_POST_READ

   接受到完整HTTP头部后的处理阶段,位于URI重写之前;

  2. NGX_HTTP_SERVER_REWRITE

    URI与location匹配之前,修改URL的阶段,用于重定向,也就是该阶段执行处于server块内,location块外的重写指令。在读取请求头的过程中,NGNIX会根据host和端口找到对应的虚拟主机配置。

  3, NGX_HTTP_FIND_CONFIG

   根据URI寻找匹配的location块配置阶段,该阶段使用重写后之后的URI来查找对应的location,该阶段可能被执行多次,可能有location级别的重写指令。

  4. NGX_HTTP_REWITR

   上一阶段找到location块后,再修改URI,location级别的URI重写阶段,该阶段执行location基本重写指令,也可能会被执行多次。

  5. NGX_HTTP_POST_REWRITE

     为了防止重写URI后导致死循环,location级别重写的后一阶段,用来检查上阶段是否有URI重写,并根据结果跳转到合适的阶段。

  6. NGX_HTTP_PERACCESS

    访问权限控制的前一阶段,该阶段在访问权限控制之前,一般也用于访问控制,比如限制访问的频率、连接数等。

  7. NGX_HTTP_ACCESS

     访问权限控制阶段,让HTTP模块判断是否允许这个请求进入NGNIX服务器,比如基于黑名单的权限控制,基于用户密码的权限控制等。

  8. NGX_HTTP_POST_ACCESS

     访问权限控制的后一阶段,该阶段根据权限控制阶段的执行结果进行相应的处理,向用户发送拒绝服务的错误码,用来相应上一阶段的拒绝。

  9. NGX_HTTP_TRY_FILES

     为访问静态资源而设置,try_files指令的处理阶段,如果没有配置try_files指令,则该阶段被跳过。

  10. NGX_HTTP_CONTENT

     处理HTTP请求内容的阶段,大部分HTTP模块进入这个阶段--相应内容生成阶段,该阶段产生相应,并发送到客户端。

  11. NGX_HTTP_LOG

   处理完请求后的日志记录阶段,该阶段记录访问日志。

 

上一篇:HTTP响应头中修改NGINX的真实SERVER信息


下一篇:Nginx与Lua开发