>  기사  >  백엔드 개발  >  nginx HTTP 모듈 구성

nginx HTTP 모듈 구성

WBOY
WBOY원래의
2016-08-08 09:23:09839검색

원본링크: http://cjhust.blog.163.com/blog/static/17582715720124544047608/

1, 데이터 구조

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; //

구성 파일 정보 “./conf/main.conf” ngx_log_t *log; //

로그

void *ctx *ctx; //(void ****)cycle->conf_ctx

설치됨 모든 모듈 구성 정보

ngx_uint_t module_type;

//현재 명령어를 처리하는 모듈의 종류 ngx_uint_t

이 명령을 처리하는 명령 유형

ngx_conf_handler_pt 핸들러; //

명령어 처리 기능

char *handler_conf; //

위의

handler};

참고: 이 구조는 주로 사용됩니다. 구성 읽기 이때

ngx_conf_s

는 구성 파일과 시스템 매개변수 사이의 브리지 역할을 합니다. typedef 구조체 {

void **main_conf;

void **srv_conf;

void **loc_conf;

} ngx_http_conf_ctx_t;

비고 : HTTP 블록의 구성 구조는 크게 3, 메인, 서버{}, 위치{}. typedef struct {

ngx_int_t (*사전 구성)(ngx_conf_t *cf); ngx_int_t (*사후 구성)(ngx_conf_t *cf);

void *( * create_main_conf)(ngx_conf_t *cf);

char *(*init_main_conf)(ngx_conf_t *cf, void *conf);

void *(*create_srv_conf)(ngx_conf_t *cf);

char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);

void *(*create_loc_conf)(ngx_conf_t *cf);

char *(*merge_loc_conf ) (ngx_conf_t *cf, void *prev, void *conf);

} ngx_http_module_t;

비고:

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_confgx_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){

ngx_http_core_main_conf_t *cmcf = 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=mainenable=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, 자주 사용하는 변수

#define NGX_HTTP_MAIN_CONF 0x02000000 //

명령어 저장 위치# 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

기능: 요청에 따라 요청 및 모듈은

main구성을 가져옵니다.

#define ngx_http_get_module_main_conf(r, 모듈) (r)-&g t;main_conf[ 모듈 .ctx_index]

ngx_http_get_module_srv_conf

기능: 에 따름 요청 요청 및 모듈은 서버가 구성됩니다.

#define ngx_http_get_module_srv_conf(r, 모듈) (r)->srv_conf[module.ctx_index]

ngx_http_get_module_loc_conf

기능 기능: 에 따름 요청 요청 및 모듈은 위치가 구성됩니다.

#define ngx_http_get_module_loc_conf(r, 모듈) (r)->loc_conf[module.ctx_index]

5.2 파싱conf

ngx_http_conf_get_module_main_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

기능 기능: 에 따르면

conf

구조 및 모듈, 위치 구성을 가져옵니다. #define ngx_http_conf_get_module_loc_conf(cf, 모듈) conf_ctx_t *) cf->ctx)->loc_conf[module.ctx_index]

5.3 사이클

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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.