원본링크: http://cjhust.blog.163.com/blog/static/17582715720124544047608/
1, 데이터 구조
ngx_conf_s
명령 매개변수, 파일에서 읽어서 이 배열에 넣습니다.
시스템 매개변수를 가리킵니다 ngx_pool_t *pool; //
메모리 풀 ngx_pool_t *temp_pool;
구성 파일 정보 “./conf/main.conf” ngx_log_t *log; //
로그
ngx_uint_t module_type;
//현재 명령어를 처리하는 모듈의 종류 ngx_uint_t
이 명령을 처리하는 명령 유형
char *handler_conf; //
위의handler};
참고:
는 구성 파일과 시스템 매개변수 사이의 브리지 역할을 합니다. typedef 구조체 {
비고 : HTTP 블록의 구성 구조는 크게 3, 메인, 서버{}, 위치{}. typedef struct {
ngx_int_t (*사전 구성)(ngx_conf_t *cf); ngx_int_t (*사후 구성)(ngx_conf_t *cf);
HTTP
ctx
8 기능. ngx_command_sstruct ngx_command_s { ngx_str_t 이름;
ngx_uint_t 유형; 문자 cf, ngx_command_t *cmd, 무효 * conf);
ngx_uint_t conf;
ngx_uint_t offset;
void ngx_null_string , 0, NULL, 0, 0, NULL }
2, HTTP ctx
2.1 create_main_conf(ngx_conf_t *cf)
매개변수: ngx_conf_t *cf, 구성 구조
반환 값: void *
참고: 의 반환 값은 ngx_http_conf_get_module_main_conf 및 gx_http로 반환될 수 있습니다. _get_module_ main _conf 결과; static void * ngx_http_barrier_create_conf(ngx_conf_t *cf)
{
ngx_http_barrier_conf_t *conf; //사용자 정의 구조
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t )); //pcalloc으로 초기화
if (conf == NULL) { NULL 반환;
}
conf->enable = NGX_CONF_UNSET;
return conf; 🎜>
2.2 create_srv_conf(ngx_conf_t *cf)
매개변수: ngx_conf_t * cf, 구성 구조
반환 값: void *
🎜>ngx_http_conf_get_module_srv_conf 및 gx_http _get_module_ srv_conf; 🎜>
static void * ngx_http_barrier_create_conf(ngx_conf_t *cf){ ngx_http_barrier_conf_t * conf; //사용자 정의 구조
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t) ); //pcalloc으로 초기화 if (conf == NULL) { NULL 반환; }
conf->enable = NGX_CONF_UNSET; return conf; 🎜>
2.3 create_loc_conf(ngx_conf_t *cf)
매개변수: ngx_conf_t *cf , 구성 구조
반환 값:
void *
>ngx_http_conf_get_module_loc_conf
및
gx_http _get_module_loc_conf; >
static void * ngx_http_barrier_create_conf(ngx_conf_t *cf){
ngx_http_barrier_conf_t *conf ; //사용자 정의 구조
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t)); //pcalloc으로 초기화 if (conf == NULL) { NULL 반환; } conf ->enable = NGX_CONF_UNSET; conf 반환 🎜> } 2.4 사전 구성(ngx_conf_t *cf) 매개변수: ngx_conf_t *cf, 구성 구조; 반환 값: ngx_int_t; 참고: 연산이 올바른지 판단하는 데 사용됩니다. >정적 ngx_int_tngx_http_ssl_add_variables(ngx_conf_t *cf) { ngx_http_variable_t *var, *v; for (v = ngx_http_ssl_vars; v->name.len; v++) { var = ngx_http_add_variable(cf, &v->name, v->flags); if(var == NULL) { NGX_ERROR 반환; } var->get_handler = v->get_handler; var->data = v->data; } return NGX_OK; } 2.5 init_main_conf(ngx_conf_t *cf, void *conf) 매개변수: ngx_conf_t *cf conf, conf는 여기서 create_main을 매개변수로 사용한 경우의 반환 값입니다. >반환 값: 문자 *, NGX_CONF_OK 은 성공을 나타냅니다. 비고: 반환 값은 작업 여부를 판단하는 데에만 사용됩니다. 맞습니다. 예: 정적 문자 * ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf){ //create_main이
if (cmcf->server_names_hash_max_size == NGX_CONF_UNSET_UINT) { cmcf->server_names_hash_max_size = 512;
} if (cmcf->server_names_hash_bucket_size == NGX_CONF_UNSET_UINT) { cmcf->server_names_hash_bucket_size = ng x_cacheline_size; } cmcf->server_names_hash_bucket_size = ngx_align(cmcf->server_names_hash_bucket_size, ngx_cacheline_size); if (cmcf->variables_hash_max_size == NGX_CONF_UNSET_UINT) { cmcf->variables_hash_max_size = 512; } if (cmcf->variables_hash_bucket_size == NGX_CONF_UNSET_UINT) { cmcf-> variables_hash_bucket_size = 64; } cmcf->variables_hash_bucket_size = ngx_align(cmcf->variables_hash_bucket_size, ngx_cacheline_size); (cm cf-> ncaptures) { cmcf->ncaptures = (cmcf->ncaptures + 1) * 3; } return NGX_CONF_OK; } 2.6 merge_srv_conf(ngx_conf_t *cf, void *prev, void
*conf) 参数:ngx_conf_t *cf,配置结构体,이전是메인적配置结构体,conf是서버적配置结构体;prev =cf->ctx.srv_conf[ctx_index],c/span> 返回值:문자 *,正确返回值是NGX_CONF_OK; 备注:返回值只是작품为操작품是否正确的一个判断; 示例: 정적 문자 * ngx_http_barrier_merge_conf(ngx_conf_t *cf, void *parent, void *child) { ngx_http_barrier_conf_t *prev = parent; ngx_http_barrier_conf_t *conf = child; if (conf->shm_zone == NULL){ *conf = *prev; } ngx_conf_merge_value(conf->enable, prev->enable, 0); //기본값은 0 return NGX_CONF_OK; } 备注: 병합 서버적주주要功能是,如果메인里配置了enable=1,而서버{}里enable=
NGX_CONF_UNSET,则将서버적enable=main적enable=1; 2.7 merge_loc_conf(ngx_conf_t *cf, void *prev, void
*conf) 원리동merge_srv_conf(ngx_conf_t *cf, void *prev,
void *conf) 2.8 사후 구성(ngx_conf_t *cf) 参数:ngx_conf_t *cf; 返回值:ngx_int_t,正确返回值是NGX_OK;> 🎜> 示例: static ngx_int_t ngx_http_tracker_init(ngx_conf_t *cf) { ngx_tracker_flag = 0; return NGX_OK; } 참고: 전역 변수 교체 플래그는 배리어 모듈이 있는지 확인하기 위해 지워집니다. 지워지지 않으면 배리어가 구성에 추가되지 않은 경우가 됩니다.
zone, kill –HUP일 때 전역 변수 flag의 값은 변경되지 않기 때문입니다. , 0, 이 아닙니다. 사용자가 traker 명령을 실행하면, 분할 오류가 발생합니다. HTTP
명령 4, 자주 사용하는 변수 명령어 저장 위치# NGX_HTTP_SRV_CONF 0x04000000 #define NGX_HTTP_LOC_CONF 0x08000000#define NGX_HTTP_UP S_CONF 0x1000000 0#정의 NGX_HTTP_SIF_CONF 0x20000000 #define NGX_HTTP_LIF_CONF 0x40000000 #define NGX_HTTP_LMT_CONF 0x80000000 #define NGX_HTTP_MAIN_CONF_OFFSET 오프셋of(ngx_http_conf_ctx_t, main_conf) #define NGX_HTTP_SRV_CONF_OFFSET 오프셋of(ngx_http_conf_ctx_t, srv_conf) #define NGX_HTTP_LOC_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, loc_conf) 예: static ngx_command_t ngx_http_print_commands[] = { { ngx_string("print"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, ngx_http_print_setup, ngx_http_print_setup, 🎜> //set() 은 매개변수를 변환합니다. 통과 읽기 명령을 실행하고 적절한 값을 구성 구조 NGX_HTTP_LOC_CONF_OFFSET, offsetof(ngx_http_print_loc_conf_t에 저장합니다. , 편집), NULL }, ngx_null_command }; 5 , 일반적으로 사용함수
5.1 처리 요청 ngx_http_get_module_main_conf 기능: 요청에 따라 요청 및 모듈은 #define ngx_http_get_module_main_conf(r, 모듈) (r)-&g t;main_conf[ 모듈 .ctx_index] 기능: 에 따름 요청 요청 및 모듈은 서버가 구성됩니다. #define ngx_http_get_module_srv_conf(r, 모듈) (r)->srv_conf[module.ctx_index] 기능 기능: 에 따름 요청 요청 및 모듈은 위치가 구성됩니다. #define ngx_http_get_module_loc_conf(r, 모듈) (r)->loc_conf[module.ctx_index] 5.2 파싱conf 기능 기능: 에 따름conf 구조와 모듈은 main 구성됩니다. #define ngx_http_conf_get_module_main_conf(cf, module) ctx_t *) cf->main_conf[module.ctx_index] ngx_http_conf_get_module_srv_conf 에 따르면 conf 구조와 모듈을 사용하면 server 구성을 얻을 수 있습니다. #define ngx_http_conf_get_module_srv_conf(cf, module) _conf_ctx_t *) cf->ctx)->srv_conf[module.ctx_index] ngx_http_conf_get_module_loc_conf
구조 및 모듈, 위치 구성을 가져옵니다. #define ngx_http_conf_get_module_loc_conf(cf, 모듈) conf_ctx_t *) cf->ctx)->loc_conf[module.ctx_index]
ngx_http_cycle_get_module_main_conf #define ngx_http_cycle_get_module_main_conf(사이클, 모듈) 🎜> (cycle->conf_ctx [ngx_http_module.index] ? 🎜> —>main_ conf [module.ctx_index]: 🎜>
위 내용은 내용의 측면을 포함하여 nginx HTTP 모듈의 구성을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.
main구성을 가져옵니다.
ngx_http_get_module_srv_conf
ngx_http_get_module_loc_conf
ngx_http_conf_get_module_main_conf
기능 기능:
기능 기능: 에 따르면
conf