Nginx处理HTTP请求的11个阶段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx处理HTTP请求的11个阶段相关的知识,希望对你有一定的参考价值。

参考技术A 在 read 完请求的头部之后,在没有对头部做任何处理之前,想要获取到一些原始的值,就应该在这个阶段进行处理。这里面会涉及到一个 realip 模块。

和下面的 REWRITE 阶段一样,都只有一个模块叫 rewrite 模块,一般没有第三方模块会处理这个阶段。

做 location 的匹配,暂时没有模块会用到。

对 URL 做一些处理。

处于 REWRITE 之后,也是暂时没有模块会在这个阶段出现。

是在 ACCESS 之前要做一些工作,例如并发连接和 QPS 需要进行限制,涉及到两个模块:limt_conn 和 limit_req

核心要解决的是用户能不能访问的问题,例如 auth_basic 是用户名和密码,access 是用户访问 IP,auth_request 根据第三方服务返回是否可以去访问。

在处理 CONTENT 之前会做一些事情,例如会把子请求发送给第三方的服务去处理,try_files 模块也是在这个阶段中。

这个阶段涉及到的模块就非常多了,例如 index, autoindex, concat 等都是在这个阶段生效的。

记录日志 access_log 模块。

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

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

 

以上是关于Nginx处理HTTP请求的11个阶段的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求的11个处理阶段

07《Nginx 入门教程》Nginx 的 Http 模块介绍(上)

NginxHTTP请求的11个处理阶段

nginx 11个处理阶段 && nginx lua 8个处理阶段

Nginx处理请求的11个阶段

nginx重新整理——————http请求的11个阶段中的content阶段[十八]