发布日期:2013-03-23 10:42 来源:末信 标签: Nginx 初始化结构体
 

初始化结构体( merge_loc_conf)

这是用在circle_gif模块的合并函数:

static char *
ngx_http_circle_gif_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{
ngx_http_circle_gif_loc_conf_t *prev = parent;
ngx_http_circle_gif_loc_conf_t *conf = child;
ngx_conf_merge_uint_value(conf->min_radius, prev->min_radius, 10);
ngx_conf_merge_uint_value(conf->max_radius, prev->max_radius, 20);
if (conf->min_radius < 1) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"min_radius must be equal or more than 1");
return NGX_CONF_ERROR;
}
if (conf->max_radius < conf->min_radius) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "max_radius must be equal or more than min_radius");
return NGX_CONF_ERROR;
}
return NGX_CONF_OK;
}

首先需要注意的是Nginx为不同的类型提供了良好的合并函数(ngx_conf_merge_<data type>_value);这些参数含义是:

1、当前参数变量

2、如果第一个参数没有被设置

3、如果第一个和第二个参数都没有设置时的默认值

结果会保存在第一个参数中。有效的合并函数包括 ngx_conf_merge_size_value, ngx_conf_merge_msec_value,在core/ngx_conf_file.h 里有完整的列出。

有个问题:因为第一个参数是传值的,这些值是如何写到第一个参数中?

回答:这些函数其实都是预处理命令(在真正编译之前,它们会被扩展成一些 if语句)。

注意错误是如何产生的;这些函数把错误信息写到l og文件中,然后返回 NGX_CONF_ERROR。返回代码会中止服务的启动。(因为被标识为NGX_LOG_EMERG,这些消息也会被会输出到标准输出; core/ngx_log.h 有完整的日志级别。)

相关评论

专题信息
    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。