nginx之main函数的解读(四)
2014-10-12 11:03
3039 查看
好了,我们继错误信息的初始化之后,继续解读main函数,它接下来的操作是这样的
而ngx_get_options函数是这样的:
而该函数的定义就在core文件夹下面的nginx.c文件当中,ngx_get_option函数主要作用是可以读入用户在启动nginx现在说下笔者感觉比较疑惑的几个参数
第一个是ngx_prefix,该参数是在ngx_process_options(该函数也是在nginx.c文件当中)中使用的,如果用户不指定该参数,则使用程序所在当前目录,作为默认的目录,其实 也就说说运行目录,如果在configure中,应该指定的就是安装目录了,如果指定的话,当然就是用指定目录了,以后的操作都是在该目录下进行的,同时该ngx_prefix要记录在ngx_cycle_t的conf_prefix当中的。
第二个是ngx_conf_file参数,如果制定了-c就是说指定了ngx_conf_file参数的话,我们就得将该信息放在ngx_cycle_t当中的conf_file当中,如果是没有指定参数的话那么。就默认使用
如果而NGX_CONF_PATH,也就是nginx的安装目录下的conf文件夹下的nginx.conf文件
第三个就是ngx_conf_params 也就是-g参数,如果指定了ngx_conf_param参数,那么就需要记录该参数,在ngx_cycle_t的conf_param的参数里面
第四个就是ngx_test_config也就是 -t参数,如果指定了,那么就将nginx的日志记录登记设置成NGX_LOG_INFO。即(cycle->log->log_level=NGX_LOG_INFO)
以上几个操作都是在ngx_process_options函数中执行的。
至此,nginx的参数设置完成,明天继续...
if (ngx_get_options(argc, argv) != NGX_OK) { return 1; }
而ngx_get_options函数是这样的:
static ngx_int_t ngx_get_options(int argc, char *const *argv) { u_char *p; ngx_int_t i; for (i = 1; i < argc; i++) { p = (u_char *) argv[i]; //这要说明第一个参数之前应该有-的标记,如果没有则不是正规的参数说明,即报错 if (*p++ != '-') { ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]); return NGX_ERROR; } //开始从-之后的第一个字符开始读取 while (*p) { //接下来就是获取参数是 switch (*p++) { //这里面自然就是版本信息了,是否显示版本信息,同时读取到该参数之后停止读取后面的参数,如果是?或者h则显示版本信息和帮助信息(-? -h) case '?': case 'h': ngx_show_version = 1; ngx_show_help = 1; break; //这里面显示的是版本号(-v),停止读取后续信息 case 'v': ngx_show_version = 1; break; //这里面显示的版本号和配置信息(-V),停止读取后续信息 case 'V': ngx_show_version = 1; ngx_show_configure = 1; break; //运行测试配置信息,停止读取后续信息 case 't': ngx_test_config = 1; break; //停止运行nginx,同时,停止读取后续信息 case 'q': ngx_quiet_mode = 1; break; /*一般我们知道,如果是p开始的,那么他的配置信息应该是如下例程的:--prefix=/usr/local/nginx --add-module=/home/yefeng/ngxdev/ngx_http_echo 也就是说以p开始的字符串是prefix=/usr/local/nginx 就将ngx_prefix置成了prefix=/usr/local/nginx,如果仅仅是 -p 那么我们就将目光转向-p 后面的字 符串,或者说配置信息,也就是--add-module=/home/yefeng/ngxdev/ngx_http_echo,将这个信息赋给ngx_prefix即可,不出错,则继续循环*/ case 'p': if (*p) { ngx_prefix = p; goto next; } if (argv[++i]) { // ngx_prefix当前的参数信息 ngx_prefix = (u_char *) argv[i]; goto next; } //记录下 错误的信息 ngx_log_stderr(0, "option \"-p\" requires directory name"); return NGX_ERROR; //寻找配置信息所在的位置,没有则获取默认位置的配置文件,不出错,则继续读取(-cngxin.conf 或者-c nginx.conf) case 'c': if (*p) { //c 表明的是配置文件所在 ngx_conf_file = p; goto next; } if (argv[++i]) { //下一个可能就是了,针对不同的输入格式 ngx_conf_file = (u_char *) argv[i]; goto next; } ngx_log_stderr(0, "option \"-c\" requires file name"); return NGX_ERROR; //获取配置参数,同时也是两种方式-gparam 或者 -g param,不出错,则继续循环 case 'g': if (*p) { // g 表明的是配置参数 ngx_conf_params = p; goto next; } if (argv[++i]) { //可能输入参数格式有些问题 ngx_conf_params = (u_char *) argv[i]; goto next; } ngx_log_stderr(0, "option \"-g\" requires parameter"); return NGX_ERROR; //读取信号处理,退出,重启,等等操作,如果参数正确,则继续循环,不正确,则退出-squit 或者-s quit case 's': if (*p) { // s说明要输入的是信号,同时读取,我们知道信号 只有 stop quit reopen reload只有几个,其他的都不对 ngx_signal = (char *) p; } else if (argv[++i]) { ngx_signal = argv[i]; } else { ngx_log_stderr(0, "option \"-s\" requires parameter"); return NGX_ERROR; } if (ngx_strcmp(ngx_signal, "stop") == 0 || ngx_strcmp(ngx_signal, "quit") == 0 || ngx_strcmp(ngx_signal, "reopen") == 0 || ngx_strcmp(ngx_signal, "reload") == 0) { ngx_process = NGX_PROCESS_SIGNALLER; goto next; } ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal); return NGX_ERROR; //除了上述参数以外不接受其他,如果有了,则进行错误处理,启动失败 default: ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1)); return NGX_ERROR; } } next: continue; } return NGX_OK; }
而该函数的定义就在core文件夹下面的nginx.c文件当中,ngx_get_option函数主要作用是可以读入用户在启动nginx现在说下笔者感觉比较疑惑的几个参数
第一个是ngx_prefix,该参数是在ngx_process_options(该函数也是在nginx.c文件当中)中使用的,如果用户不指定该参数,则使用程序所在当前目录,作为默认的目录,其实 也就说说运行目录,如果在configure中,应该指定的就是安装目录了,如果指定的话,当然就是用指定目录了,以后的操作都是在该目录下进行的,同时该ngx_prefix要记录在ngx_cycle_t的conf_prefix当中的。
第二个是ngx_conf_file参数,如果制定了-c就是说指定了ngx_conf_file参数的话,我们就得将该信息放在ngx_cycle_t当中的conf_file当中,如果是没有指定参数的话那么。就默认使用
NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
如果而NGX_CONF_PATH,也就是nginx的安装目录下的conf文件夹下的nginx.conf文件
第三个就是ngx_conf_params 也就是-g参数,如果指定了ngx_conf_param参数,那么就需要记录该参数,在ngx_cycle_t的conf_param的参数里面
第四个就是ngx_test_config也就是 -t参数,如果指定了,那么就将nginx的日志记录登记设置成NGX_LOG_INFO。即(cycle->log->log_level=NGX_LOG_INFO)
以上几个操作都是在ngx_process_options函数中执行的。
至此,nginx的参数设置完成,明天继续...
相关文章推荐
- nginx之main函数的解读(六)
- nginx之main函数的解读(八)
- nginx之main函数的解读(一)
- nginx之main函数的解读(三)
- nginx之main函数的解读(七)
- nginx之main函数的解读(五)
- 基于 Nginx 的软件负载均衡实现解读
- nginx gzip配置参数解读
- Nginx篇--解读nginx配置
- Nginx-解读内置非默认模块 ngx_http_stub_status_module
- nginx配置文件nginx.conf解读
- nginx源码解读之二--nginx_string_t
- jpcsp源码解读之二:main函数与jpcsp的初始化流程
- Nginx 权威解读
- nginx设计解读--模块化设计及程序初始化
- NGINX----源码阅读一(main函数)
- Nginx 负载均衡原理解读
- 解读 nginx 中 chain 和 buf
- nginx中CPU亲和性源码解读
- [置顶] nginx源码阅读(二).初始化:main函数及ngx_init_cycle函数