찾다
백엔드 개발PHP 튜토리얼nginx HTTP 모듈 구성

원본링크: 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으로 문의하세요.
PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?Apr 17, 2025 am 12:24 AM

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP vs. Python : 사용 사례 및 응용 프로그램PHP vs. Python : 사용 사례 및 응용 프로그램Apr 17, 2025 am 12:23 AM

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기