nginx中的配置模型

2020-05-07  本文已影响0人  areece

如果不尝试着说些什么,那么所有的学习都将没有太多的意义。

学习内容

看的是《深入理解nginx》书籍,这本书讲得很细,适合初看,再读时,就必然进入书越读越簿的境界,否则实在是太浪费时间了。

说了些什么

http的配置,包括了main,server与location三个层次

typedef struct {
    void        **main_conf;
    void        **srv_conf;
    void        **loc_conf;
} ngx_http_conf_ctx_t;

而所有的配置,都可以在http,server和location上独立存在,框架上都使用上面 的ngx_http_conf_ctx_t结构体保存。

框架在ngx_http_block, ngx_http_core_server与ngx_http_core_location三个函数中,都是一进去,不管三七二十一,创建这个结构体再说。对于server与location对应的ngx_http_conf_t结构中的,共享全局的http中的main_conf,location对象则共享了所有server的srv_conf。

怎么关联

关联关系是由http core module维护的,当创建基于server的ngx_http_conf_ctx_t结构体时,它们被保存到http_core_module_t的servers成员中去了,而http_core_module的配置ngx_http_core_main_conf_t就保存在全局main里面的关于http_core_module的位置上。

所有的location按照层次级别,组成了一棵树,这树通过location_queue_t形成链表,当作兄弟节点链接,而locations则往下链着子树。而创建server那一层级的时候,会创建一个ngx_http_core_loc_conf_t是这棵树的根。

至于碰到http时创建的那个ngx_http_core_loc_conf_t的是不是server那一级的父节点,要去看看代码:P)。

维护上下文环境

对于每一个请求,分配数组,数组中的每一个元素,都可以用来保存一个http模块的上下文环境。这有点与配置模型没有关系了。

上一篇 下一篇

猜你喜欢

热点阅读