美文网首页码农的世界简友广场每周500字
NGINX HTTP处理阶段几个重要的数据结构

NGINX HTTP处理阶段几个重要的数据结构

作者: 抟九 | 来源:发表于2019-08-06 06:07 被阅读31次
typedef struct ngx_http_phase_handlers ngx_http_phase_handler_t;
typedef ngx_int_t (*ngx_http_phase_handler_pt) (ngx_http_request_t *r, ngx_http_phase_handler_t *ph);
typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
struct ngx_http_phase_handler_s {
    ngx_http_phase_handler_pt    checker;
    ngx_http_handler_pt                handler;
    ngx_uint_t                                next;
};
  1. 一个http阶段,包括check检查方法和handler处理方法,其中check检查方法只能由HTTP框架(ngx_http_core_module模块)实现,以此来控制请求的流程
  2. next的设计使得处理阶段不必按照顺序依次执行
typedef struct {
    ngx_http_phase_handler_t    *handlers;
    ngx_uint_t                               server_rewrite_index;
    ngx_uint_t                               location_rewrite_index;
} ngx_http_phase_engine_t;
  1. handlers是由ngx_http_phase_handler_t组成的数组,它表示一个请求可能经历的所有ngx_http_phase_handler_t处理方法
  2. server_rewrite_index表示NGX_HTTP_SERVER_REWRITE_PHASE阶段第一个ngx_http_phase_handler_t处理方法在handlers数组里的序号,便于从任何一个阶段快速跳转到NGX_HTTP_SERVER_REWRITE_PHASE阶段
  3. location_rewrite_index表示NGX_HTTP_REWRITE_PHASE阶段的第一个ngx_http_phase_handler_t处理方法在handlers数组里的序号,便于从任何一个阶段快速跳转到NGX_HTTP_REWRITE_PHASE阶段
  4. 可以看出,ngx_http_phase_engine_t保存了当前配置下,一个用户请求可能经历的所有ngx_http_phase_handler_t方法,ngx_http_phase_engine_t结构体是保存在全局的ngx_http_core_main_conf_t结构体中
typedef struct {
    ngx_array_t    handlers;
}ngx_http_phase_t;

typedef struct {
  ……
  ngx_http_phase_engine_t            phase_engine;
  ngx_http_phase_t                         phases[NGX_HTTP_LOG_PHASE + 1];
  ……
} ngx_http_core_main_t;
  1. phase_engine 控制着运行过程中一个HTTP请求所要经过的HTTP处理阶段,它将配合ngx_http_request_t结构体中的phase_handler成员使用(phase_handler指定了当前请求应当执行哪一个HTTP阶段); 而phases数组更想一个临时变量,它实际上只会在Nginx启动过程中用到,它的唯一使命是按照11个阶段的概念初始化phase_engine中的handlers数组

相关文章

网友评论

    本文标题:NGINX HTTP处理阶段几个重要的数据结构

    本文链接:https://www.haomeiwen.com/subject/skzvdctx.html