博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx源码剖析--HTTP模块初始化概述
阅读量:4165 次
发布时间:2019-05-26

本文共 1270 字,大约阅读时间需要 4 分钟。


前言

前面讲了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请求进行处理了。

你可能感兴趣的文章
SpringBoot之开发web页面
查看>>
SpringBoot之快速部署
查看>>
springBoot之jar包在后台(运行:编写start、stop脚本)
查看>>
redis学习
查看>>
SpringBoot之application.properties文件能配置的属性
查看>>
javaWeb监听器、过滤器、拦截器
查看>>
RESTFUL风格的接口
查看>>
后台参数验证配置
查看>>
SpringBoot之外置Tomcat配置
查看>>
java 删除 list 中的元素
查看>>
idea启动优化
查看>>
java发展史
查看>>
Java内存区域
查看>>
数据库与模式的区别
查看>>
Sql随机取数据
查看>>
PHP定时跳转
查看>>
include、require、include_once、require_once的区别
查看>>
构造函数、析构函数是否要声明为虚函数的问题
查看>>
C++中的虚函数
查看>>
Mysql数据库创建用户
查看>>