nginx 配置文件解析
2010-11-12 17:03
513 查看
ngx_conf_parse 这个函数来完成对配置文件的解析,其实这个函数不仅仅解析文件,还可以用来解析参数和块的,不过我们在这里分析解析文件。
文件简单的分为三个部分
一 配置文件预先处理
二 读取
三 处理
一 配置文件预处理
主要打开文件,创建缓冲区,并把文件信息以及读取的缓冲区信息填到cf->conf_file中,这样文件也有了,数据存放地方也准备好了
二 读取文件
其实这里读取文件和处理指令是读取一条、处理一条的。这个功能是在conf_read_token函数中实现, 读取的时候,先把内容放到缓冲区中,并进行解析,把解析的结果放到了cf->args 里面, 指令的每个单词都在数组中占一个位置,比如 set debug off ,那么数组中存三个位置。
三 处理指令
这个功能是在函数ngx_conf_handle中实现的,整个过程中需要遍历所有模块中的所有指令,如果找到一个,就直接调用指令的set 函数,完成对模块的配置信息的设置。 这里主要的过程就是判断是否是找到,需要判断下面一些条件:
a 名字一致。配置文件中指令的名字和模块指令中的名字需要一致
b 模块类型一致。配置文件指令处理的模块类型和当前模块一致
c 指令类型一致。 配置文件指令类型和当前模块指令一致
d 参数个数一致。配置文件中参数的个数和当前模块的当前指令参数一致。
文件简单的分为三个部分
一 配置文件预先处理
二 读取
三 处理
一 配置文件预处理
主要打开文件,创建缓冲区,并把文件信息以及读取的缓冲区信息填到cf->conf_file中,这样文件也有了,数据存放地方也准备好了
fd = ngx_open_file(filename->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0); if (fd == NGX_INVALID_FILE) { ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno, ngx_open_file_n " /"%s/" failed", filename->data); return NGX_CONF_ERROR; } prev = cf->conf_file; cf->conf_file = &conf_file; if (ngx_fd_info(fd, &cf->conf_file->file.info) == -1) { ngx_log_error(NGX_LOG_EMERG, cf->log, ngx_errno, ngx_fd_info_n " /"%s/" failed", filename->data); } //配置文件中的信息读取到这个缓冲区,分配空间并初始化 cf->conf_file->buffer = &buf; buf.start = ngx_alloc(NGX_CONF_BUFFER, cf->log); if (buf.start == NULL) { goto failed; } buf.pos = buf.start; buf.last = buf.start; buf.end = buf.last + NGX_CONF_BUFFER; buf.temporary = 1; //配置文件相关的信息:打开的文件句柄、文件名字 cf->conf_file->file.fd = fd; cf->conf_file->file.name.len = filename->len; cf->conf_file->file.name.data = filename->data; cf->conf_file->file.offset = 0; cf->conf_file->file.log = cf->log; cf->conf_file->line = 1; type = parse_file;
二 读取文件
其实这里读取文件和处理指令是读取一条、处理一条的。这个功能是在conf_read_token函数中实现, 读取的时候,先把内容放到缓冲区中,并进行解析,把解析的结果放到了cf->args 里面, 指令的每个单词都在数组中占一个位置,比如 set debug off ,那么数组中存三个位置。
三 处理指令
这个功能是在函数ngx_conf_handle中实现的,整个过程中需要遍历所有模块中的所有指令,如果找到一个,就直接调用指令的set 函数,完成对模块的配置信息的设置。 这里主要的过程就是判断是否是找到,需要判断下面一些条件:
a 名字一致。配置文件中指令的名字和模块指令中的名字需要一致
b 模块类型一致。配置文件指令处理的模块类型和当前模块一致
c 指令类型一致。 配置文件指令类型和当前模块指令一致
d 参数个数一致。配置文件中参数的个数和当前模块的当前指令参数一致。
相关文章推荐
- nginx配置文件详细解析
- nginx的配置文件解析:ngx_conf_read_token函数
- nginx 配置文件解析
- nginx配置文件解析工具
- nginx配置文件解析原理
- Nginx--配置文件解析
- Nginx.conf 配置文件全面解析
- Nginx 安装配置文件解析
- Nginx http_core模块 配置文件解析
- 网站Nginx配置时无法解析php文件
- nginx配置文件解析
- Nginx配置文件解析
- nginx 配置文件解析
- Nginx简易配置文件(一)(静态页面及PHP页面解析)
- nginx配置文件大解析(优化)
- 关于Nginx的配置文件解析
- nginx.conf配置文件解析(http、server、location)
- Nginx安装与配置文件解析 【简单描述】
- nginx配置文件解析过程分析
- nginx配置文件大解析