nginx 명령 해석
명령 해석
- nginx ngx_conf_s ngx_command_s 。 ngx_commands;
ngx_command_s
struct ngx_command_s {
ngx_str_t name;//command
ngx_uint_t type;//command
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); //
ngx_uint_t conf;//
ngx_uint_t offset;// offset
void *post;// ,
};
설명 하 다.
command ,
#define ngx_null_command { ngx_null_string, 0, NULL, 0, 0, NULL }
command
type :
- NGX_DIRECT_CONF , core
- NGX_MAIN_CONF , main( core ),
- NGX_ANY_CONF
- NGX_CONF_BLOCK {}
- NGX_EVENT_CONF
- NGX_CONF_NOARGS ,NGX_CONF_MAX_ARGS NGX_CONF_TAKE1 .... NGX_CONF_TAKE7 。 (NGX_CONF_TAKE1|NGX_CONF_TAKE7)
ngx_conf_s
struct ngx_conf_s {
char *name;
ngx_array_t *args;//
ngx_cycle_t *cycle;
ngx_pool_t *pool;
ngx_pool_t *temp_pool;
ngx_conf_file_t *conf_file;//
ngx_log_t *log;
void *ctx;// ctx
ngx_uint_t module_type;//
ngx_uint_t cmd_type;//
ngx_conf_handler_pt handler;
char *handler_conf;
};
- cycle
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_CORE_MODULE) {//core module
continue;
}
module = ngx_modules[i]->ctx; //
if (module->create_conf) {
rv = module->create_conf(cycle);
if (rv == NULL) {
ngx_destroy_pool(pool);
return NULL;
}
cycle->conf_ctx[ngx_modules[i]->index] = rv;// core_module
}
}
conf.ctx = cycle->conf_ctx;
conf.cycle = cycle;
conf.pool = pool;
conf.log = log;
conf.module_type = NGX_CORE_MODULE;
conf.cmd_type = NGX_MAIN_CONF;
main nginx ngx_core_module create_conf , core , core main_conf
- static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf) , args
- NGX_CONF_BLOCK_START , handler handler , static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last) .
static ngx_int_t
ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)//config
{
char *rv;
void *conf, **confp;
ngx_uint_t i, found;
ngx_str_t *name;
ngx_command_t *cmd;
name = cf->args->elts;//args
found = 0;//
for (i = 0; ngx_modules[i]; i++) {// nginx
cmd = ngx_modules[i]->commands;// model command
if (cmd == NULL) {
continue;
}
for ( /* void */ ; cmd->name.len; cmd++) {
if (name->len != cmd->name.len) {
continue;
}
if (ngx_strcmp(name->data, cmd->name.data) != 0) {
continue;
}
found = 1;//
if (ngx_modules[i]->type != NGX_CONF_MODULE
&& ngx_modules[i]->type != cf->module_type)//
{
continue;
}
/* is the directive's location right ? */
if (!(cmd->type & cf->cmd_type)) { //
continue;
}
if (!(cmd->type & NGX_CONF_BLOCK) && last != NGX_OK) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"directive \"%s\" is not terminated by \";\"",
name->data);
return NGX_ERROR;
}//
if ((cmd->type & NGX_CONF_BLOCK) && last != NGX_CONF_BLOCK_START) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"directive \"%s\" has no opening \"{\"",
name->data);
return NGX_ERROR;
}
/* is the directive's argument count right ? */
if (!(cmd->type & NGX_CONF_ANY)) {//
if (cmd->type & NGX_CONF_FLAG) {
if (cf->args->nelts != 2) {
goto invalid;
}
} else if (cmd->type & NGX_CONF_1MORE) {
if (cf->args->nelts < 2) {
goto invalid;
}
} else if (cmd->type & NGX_CONF_2MORE) {
if (cf->args->nelts < 3) {
goto invalid;
}
} else if (cf->args->nelts > NGX_CONF_MAX_ARGS) {
goto invalid;
} else if (!(cmd->type & argument_number[cf->args->nelts - 1]))
{
goto invalid;
}
}
/* set up the directive's configuration context */
conf = NULL;
//module->index module->ctx_index
if (cmd->type & NGX_DIRECT_CONF) {//
conf = ((void **) cf->ctx)[ngx_modules[i]->index];//
} else if (cmd->type & NGX_MAIN_CONF) {
conf = &(((void **) cf->ctx)[ngx_modules[i]->index]);//
/*
core_moudle block , , , , ,
*/
} else if (cf->ctx) {//
confp = *(void **) ((char *) cf->ctx + cmd->conf);
/*
:ngx_event_moudle
ctx = ngx_pcalloc(cf->pool, sizeof(void *));
*ctx = ngx_pcalloc(cf->pool, ngx_event_max_module * sizeof(void *));
cf->ctx = ctx;
cf->module_type = NGX_EVENT_MODULE;
cf->cmd_type = NGX_EVENT_CONF;
cmd->conf =0;
ctx * ngx_event_max_module void * conf
*/
if (confp) {//
conf = confp[ngx_modules[i]->ctx_index];//
}
}
rv = cmd->set(cf, cmd, conf);//
if (rv == NGX_CONF_OK) {
return NGX_OK;
}
if (rv == NGX_CONF_ERROR) {
return NGX_ERROR;
}
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"%s\" directive %s", name->data, rv);
return NGX_ERROR;
}
}
if (found) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"%s\" directive is not allowed here", name->data);
return NGX_ERROR;
}
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"unknown directive \"%s\"", name->data);
return NGX_ERROR;
invalid:
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid number of arguments in \"%s\" directive",
name->data);
return NGX_ERROR;
}
block ngx_conf_parse , 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.