如果不尝试着说些什么,那么所有的学习都将没有太多的意义。
学习内容
看的是《深入理解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模块的上下文环境。这有点与配置模型没有关系了。
网友评论