Nginx之http请求处理过程

1.  Nginx的HTTP请求共有11个阶段

      阶段 1: POST_READ

    •   时机:读取完请求头部之后

    •   用途:在请求处理的早期进行一些操作

    •   典型模块:realip 模块在此阶段根据 X-Forwarded-For 等头部确定客户端的真实 IP

      阶段 2: SERVER_REWRITE

    •   时机:在 server 上下文中进行重写

    •   用途:在进入 location 匹配之前修改 URI

    •   配置位置:在 server {...} 块内但不在 location {...} 块内的 rewrite 指令

      阶段 3: FIND_CONFIG

    •   时机:重写后寻找匹配的 location

    •   用途:根据当前 URI 找到最合适的 location 配置块

    •   注意:这是 Nginx 核心逻辑,开发者无法通过配置干预

      阶段 4: REWRITE

    •   时机:在匹配到的 location 上下文中进行重写

    •   用途:在确定的 location 内进一步修改 URI

    •   配置位置:在 location {...} 块内的 rewrite 指令

      阶段 5: POST_REWRITE

    •   时机:重写阶段结束后

    •   用途:检查是否需要重新进行 location 查找(如果 URI 被重写)

    •   注意:这是内部阶段,无法配置

      阶段 6: PREACCESS

    •   时机:在访问控制之前

    •   用途:进行连接限制、请求频率限制等

    •   典型模块:limit_conn(连接数限制)、limit_req(请求频率限制)

      阶段 7: ACCESS

    •   时机:访问权限验证

    •   用途:检查客户端是否有权限访问资源

    •   典型模块:access(基于 IP 的访问控制)、auth_basic(HTTP 基本认证)

      阶段 8: POST_ACCESS

    •   时机:访问控制之后

    •   用途:处理访问控制的结果

    •   注意:这是内部阶段,无法配置

      阶段 9: PRECONTENT

    •   时机:在生成内容之前

    •   用途:进行最后的内容前处理

    •   典型模块:try_files(按顺序检查文件存在性)、mirror(请求复制)

      阶段 10: CONTENT

    •   时机:生成响应内容

    •   用途:这是最核心的阶段,实际产生返回给客户端的内容

      •   处理程序类型:

      •   静态内容处理程序(ngx_http_static_module

      •   代理处理程序(ngx_http_proxy_module

      •   FastCGI 处理程序(ngx_http_fastcgi_module

      •   等等...

      阶段 11: LOG

    •   时机:请求处理完成后

    •   用途:记录访问日志

    •   典型模块:ngx_http_log_module

posted @ 2025-09-26 15:04  奋斗史  阅读(7)  评论(0)    收藏  举报