static char * ngx_http_v2_init_main_conf(ngx_conf_t *cf, void *conf) { ngx_http_v2_main_conf_t *h2mcf = conf; ngx_conf_init_size_value(h2mcf->recv_buffer_size, 256 * 1024); return NGX_CONF_OK; }
//参考: //http://blog.csdn.net/livelylittlefish/article/details/7262750 static char * ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf) { ngx_core_conf_t *ccf = conf; //初始化daemon、master等 ngx_conf_init_value(ccf->daemon, 1); ngx_conf_init_value(ccf->master, 1); ngx_conf_init_msec_value(ccf->timer_resolution, 0); ngx_conf_init_value(ccf->worker_processes, 1); ngx_conf_init_value(ccf->debug_points, 0); #if (NGX_HAVE_SCHED_SETAFFINITY) if (ccf->cpu_affinity_n && ccf->cpu_affinity_n != 1 && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes) { ngx_log_error(NGX_LOG_WARN, cycle->log, 0, "number of the \"worker_processes\" is not equal to " "the number of the \"worker_cpu_affinity\" mask, " "using last mask for remaining worker processes"); } #endif #if (NGX_THREADS) ngx_conf_init_value(ccf->worker_threads, 0); ngx_threads_n = ccf->worker_threads; ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024); #endif //初始化pid、oldpid if (ccf->pid.len == 0) { ngx_str_set(&ccf->pid, NGX_PID_PATH); } if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) { return NGX_CONF_ERROR; } ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT); ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len); if (ccf->oldpid.data == NULL) { return NGX_CONF_ERROR; } ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len), NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT)); #if !(NGX_WIN32) //初始化username,user,group if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) { struct group *grp; struct passwd *pwd; ngx_set_errno(0); pwd = getpwnam(NGX_USER); if (pwd == NULL) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "getpwnam(\"" NGX_USER "\") failed"); return NGX_CONF_ERROR; } ccf->username = NGX_USER; ccf->user = pwd->pw_uid; ngx_set_errno(0); grp = getgrnam(NGX_GROUP); if (grp == NULL) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "getgrnam(\"" NGX_GROUP "\") failed"); return NGX_CONF_ERROR; } ccf->group = grp->gr_gid; } if (ccf->lock_file.len == 0) { ngx_str_set(&ccf->lock_file, NGX_LOCK_PATH); } //初始化lock_file if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) != NGX_OK) { return NGX_CONF_ERROR; } { ngx_str_t lock_file; lock_file = cycle->old_cycle->lock_file; if (lock_file.len) { lock_file.len--; if (ccf->lock_file.len != lock_file.len || ngx_strncmp(ccf->lock_file.data, lock_file.data, lock_file.len) != 0) { ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "\"lock_file\" could not be changed, ignored"); } //初始化ngx_cycle->lock_file cycle->lock_file.len = lock_file.len + 1; lock_file.len += sizeof(".accept"); cycle->lock_file.data = ngx_pstrdup(cycle->pool, &lock_file); if (cycle->lock_file.data == NULL) { return NGX_CONF_ERROR; } } else { cycle->lock_file.len = ccf->lock_file.len + 1; cycle->lock_file.data = ngx_pnalloc(cycle->pool, ccf->lock_file.len + sizeof(".accept")); if (cycle->lock_file.data == NULL) { return NGX_CONF_ERROR; } ngx_memcpy(ngx_cpymem(cycle->lock_file.data, ccf->lock_file.data, ccf->lock_file.len), ".accept", sizeof(".accept")); } } #endif return NGX_CONF_OK; }
static char * ngx_lua_session(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_lua_session_conf_t *lscf = conf; ngx_str_t *value, str; ngx_uint_t i; if (lscf->mode != NGX_CONF_UNSET_UINT) { return "is duplicate"; } value = cf->args->elts; for (i = 1; i < cf->args->nelts; i++) { if (ngx_strncmp(value[i].data, "mode=", 5) == 0) { str.len = value[i].len - 5; str.data = value[i].data + 5; if (ngx_strncmp(str.data, "single", 6) == 0) { lscf->mode = NGX_LUA_SESSION_MODE_SINGLE; } else if (ngx_strncmp(str.data, "cluster", 7) == 0) { lscf->mode = NGX_LUA_SESSION_MODE_CLUSTER; } else { goto invalid; } continue; } if (ngx_strncmp(value[i].data, "server=", 7) == 0) { lscf->server.len = value[i].len - 7; lscf->server.data = value[i].data + 7; continue; } if (ngx_strncmp(value[i].data, "name=", 5) == 0) { lscf->name.len = value[i].len - 5; lscf->name.data = value[i].data + 5; continue; } if (ngx_strncmp(value[i].data, "size=", 5) == 0) { str.len = value[i].len - 5; str.data = value[i].data + 5; lscf->size = ngx_parse_size(&str); if (lscf->size == (size_t) NGX_ERROR) { goto invalid; } continue; } goto invalid; } if (lscf->mode == NGX_CONF_UNSET_UINT) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "the directive \"lua_session\" must be specified"); return NGX_CONF_ERROR; } if (lscf->mode == NGX_LUA_SESSION_MODE_SINGLE) { if (lscf->name.data == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "the directive \"lua_session\" " "must be specified"); return NGX_CONF_ERROR; } ngx_conf_init_size_value(lscf->size, 1024 * 1024 * 1); lscf->zone = ngx_shared_memory_add(cf, &lscf->name, lscf->size, &ngx_lua_session_module); if (lscf->zone == NULL) { return NGX_CONF_ERROR; } if (lscf->zone->data) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate lua session name \"%V\"", &lscf->name); return NGX_CONF_ERROR; } lscf->zone->init = ngx_lua_session_init; lscf->zone->data = lscf; } else { /* TODO: cluster */ } return NGX_CONF_OK; invalid: ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\" in lua_session", &value[i]); return NGX_CONF_ERROR; }
static char * ngx_lua_autorun(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_lua_autorun_conf_t *lacf = conf; ngx_str_t *value, str; ngx_uint_t i; ngx_log_debug0(NGX_LOG_DEBUG_CORE, cf->log, 0, "lua autorun"); if (lacf->name.data != NULL) { return "is duplicate"; } value = cf->args->elts; for (i = 1; i < cf->args->nelts; i++) { if (ngx_strncmp(value[i].data, "name=", 5) == 0) { lacf->name.len = value[i].len - 5; lacf->name.data = value[i].data + 5; continue; } if (ngx_strncmp(value[i].data, "size=", 5) == 0) { str.len = value[i].len - 5; str.data = value[i].data + 5; lacf->size = ngx_parse_size(&str); if (lacf->size == (size_t) NGX_ERROR) { goto invalid; } continue; } goto invalid; } if (lacf->name.data == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "the directive \"lua_autorun\" must be specified"); return NGX_CONF_ERROR; } ngx_conf_init_size_value(lacf->size, 1024 * 1024 * 1); lacf->zone = ngx_shared_memory_add(cf, &lacf->name, lacf->size, &ngx_lua_autorun_module); if (lacf->zone == NULL) { return NGX_CONF_ERROR; } if (lacf->zone->data) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate lua autorun name \"%V\"", &lacf->name); return NGX_CONF_ERROR; } lacf->zone->init = ngx_lua_autorun_init; lacf->zone->data = lacf; return NGX_CONF_OK; invalid: ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\" in lua_autorun", &value[i]); return NGX_CONF_ERROR; }
static char * ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf) { ngx_core_conf_t *ccf = conf; #if (NGX_HAVE_CPU_AFFINITY) ngx_int_t i, n; CPU_SET_T *mask; #endif if (!ccf->worker_processes) { ccf->worker_processes = NGX_CONF_UNSET; } ngx_conf_init_value(ccf->worker_processes, ngx_ncpu); ngx_conf_init_value(ccf->daemon, 1); ngx_conf_init_value(ccf->master, 1); ngx_conf_init_msec_value(ccf->timer_resolution, 0); ngx_conf_init_value(ccf->debug_points, 0); #if (NGX_HAVE_CPU_AFFINITY) /* in default, disable cpu affinity */ if (ccf->cpu_affinity_n == 0 && ccf->cpu_affinity == NULL) { ccf->cpu_affinity_n = 1; } if (ccf->cpu_affinity_n == 0) { n = ngx_ncpu - 1; if (ngx_ncpu > 0 && ngx_ncpu <= CPU_SETSIZE) { mask = ngx_palloc(cycle->pool, ccf->worker_processes * sizeof(CPU_SET_T)); if (mask == NULL) { return NGX_CONF_ERROR; } ccf->cpu_affinity_n = ccf->worker_processes; ccf->cpu_affinity = mask; /* RR for cpu assign */ for (i = 0; i < ccf->worker_processes; i++) { CPU_ZERO(&mask[i]); CPU_SET(n, &mask[i]); if (--n < 0) { n = ngx_ncpu - 1; } } } else { ccf->cpu_affinity_n = 0; ccf->cpu_affinity = NULL; } } if (ccf->cpu_affinity_n && ccf->cpu_affinity_n != 1 && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes) { ngx_log_error(NGX_LOG_WARN, cycle->log, 0, "the number of \"worker_processes\" is not equal to " "the number of \"worker_cpu_affinity\" masks, " "using last mask for remaining worker processes"); } #endif #if (NGX_THREADS) ngx_conf_init_value(ccf->worker_threads, 0); ngx_threads_n = ccf->worker_threads; ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024); #endif if (ccf->pid.len == 0) { ngx_str_set(&ccf->pid, NGX_PID_PATH); } if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) { return NGX_CONF_ERROR; } ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT); ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len); if (ccf->oldpid.data == NULL) { return NGX_CONF_ERROR; } ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len), NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT)); #if !(NGX_WIN32) if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) { struct group *grp; struct passwd *pwd; ngx_set_errno(0); pwd = getpwnam(NGX_USER); if (pwd == NULL) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "getpwnam(\"" NGX_USER "\") failed"); return NGX_CONF_ERROR; } ccf->username = NGX_USER; ccf->user = pwd->pw_uid; ngx_set_errno(0); grp = getgrnam(NGX_GROUP); if (grp == NULL) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "getgrnam(\"" NGX_GROUP "\") failed"); return NGX_CONF_ERROR; } ccf->group = grp->gr_gid; } if (ccf->lock_file.len == 0) { ngx_str_set(&ccf->lock_file, NGX_LOCK_PATH); } if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) != NGX_OK) { return NGX_CONF_ERROR; } { ngx_str_t lock_file; lock_file = cycle->old_cycle->lock_file; if (lock_file.len) { lock_file.len--; if (ccf->lock_file.len != lock_file.len || ngx_strncmp(ccf->lock_file.data, lock_file.data, lock_file.len) != 0) { ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "\"lock_file\" could not be changed, ignored"); } cycle->lock_file.len = lock_file.len + 1; lock_file.len += sizeof(".accept"); cycle->lock_file.data = ngx_pstrdup(cycle->pool, &lock_file); if (cycle->lock_file.data == NULL) { return NGX_CONF_ERROR; } } else { cycle->lock_file.len = ccf->lock_file.len + 1; cycle->lock_file.data = ngx_pnalloc(cycle->pool, ccf->lock_file.len + sizeof(".accept")); if (cycle->lock_file.data == NULL) { return NGX_CONF_ERROR; } ngx_memcpy(ngx_cpymem(cycle->lock_file.data, ccf->lock_file.data, ccf->lock_file.len), ".accept", sizeof(".accept")); } } #endif return NGX_CONF_OK; }
static char * ngx_btt(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_btt_conf_t *bcf = conf; ngx_str_t *value, str; ngx_uint_t i; if (bcf->name.data != NULL) { return "is duplicate"; } value = cf->args->elts; for (i = 1; i < cf->args->nelts; i++) { if (ngx_strncmp(value[i].data, "name=", 5) == 0) { bcf->name.len = value[i].len - 5; bcf->name.data = value[i].data + 5; continue; } if (ngx_strncmp(value[i].data, "size=", 5) == 0) { str.len = value[i].len - 5; str.data = value[i].data + 5; bcf->size = ngx_parse_size(&str); if (bcf->size == (size_t) NGX_ERROR) { goto invalid; } continue; } if (ngx_strncmp(value[i].data, "expire=", 7) == 0) { str.len = value[i].len - 7; str.data = value[i].data + 7; bcf->expire = ngx_parse_time(&str, 1); if (bcf->expire == NGX_ERROR) { goto invalid; } continue; } if (ngx_strncmp(value[i].data, "interval=", 9) == 0) { str.len = value[i].len - 9; str.data = value[i].data + 9; bcf->interval = ngx_parse_time(&str, 1); if (bcf->interval == NGX_ERROR) { goto invalid; } continue; } goto invalid; } if (bcf->name.data == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "the directive \"btt\" must be specified"); return NGX_CONF_ERROR; } ngx_conf_init_size_value(bcf->size, 1024 * 1024 * 10); ngx_conf_init_value(bcf->expire, 60); ngx_conf_init_value(bcf->interval, 30); bcf->zone = ngx_shared_memory_add(cf, &bcf->name, bcf->size, &ngx_lua_btt_module); if (bcf->zone == NULL) { return NGX_CONF_ERROR; } if (bcf->zone->data) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate btt name \"%V\"", &bcf->name); return NGX_CONF_ERROR; } bcf->zone->init = ngx_btt_init; bcf->zone->data = bcf; return NGX_CONF_OK; invalid: ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\" in btt", &value[i]); return NGX_CONF_ERROR; }