异想天开

What's the true meaning of light, Could you tell me why

nginx的配置文件解析

日期:2014-04-17 15:48:40
  
最后更新日期:2014-05-26 15:51:42
nginx源码阅读之1
关于分析nginx的文章网上有很多,在此记录下勉励自己坚持看完整个源码,nginx源码有10万行。会采取先粗后细的方式,这里,我了解nginx的经验并不很多,仅限于工作需要,复用过nginx的http解析模块以及编写防盗链插件。今后记录的并不系统而全面,系统而全面地分析建议看参考1。不系统而全面有时反而觉得这是优点,我们思考模式也不是一想就系统而全面。这系列算是挖的一个坑,后面慢慢填,权作抛砖引玉。不会贴出过于详细代码逻辑流程图,过于详细的代码流程感觉只是给自己备忘,而软件版本的迭代变化,这种详细备忘,鄙见认为,容易搬弄是非。故文字论述为主,辅助以模块源码。

nginx解析配置文件的相关函数的关键字:
[code lang="cpp"]
ngx_init_cycle at src/core/ngx_cycle.c:61
ngx_conf_parse at src/core/ngx_conf_file.c:116
ngx_conf_read_token at src/core/ngx_conf_file.c:438
[/code]
ngx_init_cycle为nginx初始化cycle。nginx配置文件解析主要是在ngx_conf_parse里面完成的,ngx_conf_parse里面有个循环不停的从配置文件里面(/usr/local/conf/nignx.conf)里面读命令并执行命令的钩子函数,比如配置项“worker_processes 1;”,worker_processes为一个token,1也为1个token。当读完一条指令所需要的参数后,即执行这条指令对应的钩子函数。ngx_conf_read_token处理从配置文件读token的逻辑,读文件利用类似行缓冲机制,每次读取文件固定缓冲大小的一部分,使用完了再读取一个缓冲块。用一个指针记录第一个英文字符或数字字符的位置,直到遇到空格,回车,制表符,这样得到一个token,然后保存下来,当读到“;”或“}”表示已经读取到了该条命令的所有token即参数,然后返回上一层ngx_conf_parse来处理。
参考:
lenky.info博主有个系列《nginx核心讲解》