Nginx源码剖析--HTTP模块初始化概述

12 篇文章 0 订阅

前言

前面讲了HTTP模块配置结构体的组织以及各个server,location块为了能够实现快速查找而使用的组织数据结构。这些内容都属于HTTP模块的初始化部分。除了之前讲的内容之外,HTTP初始化还包括其他内容。我们将在这部分讲述这些内容。

对HTTP模块的初始化是从‘ http’关键字开始的。也就是说,当配置文件解析器在配置文件中读到http关键字,则会开始根据http块中的配置信息初始化http模块。入口函数是ngx_http_block:

static char *
ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)

这个函数将是所有http模块初始化的开始。这篇文章主要是讲一下这个函数的执行流程。根据前面所讲的http模块的struct形式:

typedef struct {
    ngx_int_t   (*preconfiguration)(ngx_conf_t *cf);
    ngx_int_t   (*postconfiguration)(ngx_conf_t *cf);

    void       *(*create_main_conf)(ngx_conf_t *cf);
    char       *(*init_main_conf)(ngx_conf_t *cf, void *conf);

    void       *(*create_srv_conf)(ngx_conf_t *cf);
    char       *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);

    void       *(*create_loc_conf)(ngx_conf_t *cf);
    char       *(*merge_loc_conf)(ngx_conf_t *cf, void *prev, void *conf);
} ngx_http_module_t;

我们将讲解http模块初始化时是按什么顺序执行这些成员初始化函数的。

总的来说,http_block的工作主要分为两部分,一部分是执行上述的ngx_http_module_t的成员函数完成对模块的初始化,其二是初始化与http相关的一些全局信息。当然,这些全局信息其实大多数也是存储在http模块的配置结构体中的,只不过初始化时不需要调用ngx_http_module_t的成员函数。


http_block函数的执行流程

这里写图片描述

里面很多内容我们还没有涉及到,比如变量,阶段处理函数等等。后面我们会分别解释这些内容。


总结

执行完http_block函数,则http模块的所有初始化都结束了。包括各个location块,server块;http请求的各个处理阶段的handler也已经就位;有关请求的各个header的处理函数也已经就位,等等。后面就可以根据这些初始化的东西对http请求进行处理了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值