Nginx 的模块

2016-1-13 chenhui Nginx

Nginx 有四种模块:

  1. handler,完成客户端的请求,并产生响应数据。
  2. filters,对 handler 产生的数据进行过滤(增/删/改)。
  3. upstream,如果存在其他后端服务器(如PHP),那么 Nginx 则使用这种模块进行转发。
  4. load-balance,负载均衡。


Nginx 使用 ngx_module_s 来描述一个模块。


struct ngx_module_s {

    //当前模块在同类模块中的索引
    ngx_uint_t            ctx_index;
    //当前模块在所有模块中的索引
    ngx_uint_t            index;

    ...

    //模块版本号
    ngx_uint_t            version;

    //不同类型的模块,会指向不同的结构体
    void                 *ctx;
    //当前模块的配置数组
    ngx_command_t        *commands;
    //模块类型
    ngx_uint_t            type;

    ...
};


Nginx 是一个 Web 服务器,他使用的协议是 http 协议。对于客户端的 http 请求,Nginx 把整个过程分为多个阶段,每个阶段由一个或多个回调函数处理,这些回调函数自然是通过模块注册上来的。


Nginx 把 http 的请求分为 11 个阶段,每一个阶段都可以通过模块注册回调函数。这 11 个阶段在 ngx_http_phases 这个枚举中定义。


    NGX_HTTP_POST_READ_PHASE = 0,   // 接收到完整的HTTP头部后处理的阶段
 
    NGX_HTTP_SERVER_REWRITE_PHASE,  // URI与location匹配前,修改URI的阶段,用于重定向
 
    NGX_HTTP_FIND_CONFIG_PHASE,     // 根据URI寻找匹配的location块配置项
    NGX_HTTP_REWRITE_PHASE,         // 上一阶段找到location块后再修改URI
    NGX_HTTP_POST_REWRITE_PHASE,    // 请求地址重写完后的阶段,防止重写URL后导致的死循环
 
    NGX_HTTP_PREACCESS_PHASE,       // 访问权限检查的准备阶段
 
    NGX_HTTP_ACCESS_PHASE,          // 访问权限检查,让模块判断是否允许这个请求进入Nginx服务器
    NGX_HTTP_POST_ACCESS_PHASE,     // 检查完后的阶段,向用户发送拒绝服务的错误码,响应上一阶段
 
    NGX_HTTP_TRY_FILES_PHASE,       // 为访问静态文件资源而设置
    NGX_HTTP_CONTENT_PHASE,         // 处理HTTP请求内容的阶段,大部分HTTP模块介入这个阶段
 
    NGX_HTTP_LOG_PHASE              // 处理完请求后的日志记录阶段
} ngx_http_phases;





发表评论:

Copyright ©2015-2016 freehui All rights reserved