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
-

浙公网安备 33010602011771号