nginx 이벤트 모듈 분석 (1)
3280 단어 nginx
ngx_events_module 모듈 은 핵심 모듈 중 하나 로 다른 모든 이벤트 모듈 의 프 록 시 모듈 입 니 다.nginx 는 시작 할 때 이벤트 모듈 과 만 접촉 하고 이벤트 모듈 에서 다른 이벤트 모듈 을 불 러 옵 니 다.이렇게 하 는 장점 중 하 나 는 새로운 이벤트 모듈 을 추가 하여 추가 설정 항목 을 처리 할 때 기 존 이벤트 모듈 코드 는 변경 할 필요 가 없다 는 것 이다.이벤트 모듈 기능 은 매우 간단 합 니 다. 이벤트 설정 항목 만 처리 합 니 다 (ngx events block 함수 로 처리 합 니 다).ngx_events_block 함 수 는 세 가지 일 을 합 니 다. 하 나 는 다른 이벤트 모듈 에 설정 항목 구 조 를 저장 하 는 포인터 배열 을 만 들 고 다른 이벤트 모듈 의 create 를 호출 합 니 다.conf 함수.2. ngx 호출conf_parse 함수 가 이벤트 설정 블록 내의 설정 항목 을 분석 합 니 다.3. 다른 이벤트 모듈 의 init 호출conf 함수.
ngx_events_block 함수 분석
static char *
ngx_events_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
char *rv;
void ***ctx;
ngx_uint_t i;
ngx_conf_t pcf;
ngx_event_module_t *m;
if (*(void **) conf) {
return "is duplicate";
}
/* count the number of the event modules and set up their indices */
/*** , ctx_index ***/
ngx_event_max_module = 0;
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_EVENT_MODULE) {
continue;
}
ngx_modules[i]->ctx_index = ngx_event_max_module++;
}
ctx = ngx_pcalloc(cf->pool, sizeof(void *));
if (ctx == NULL) {
return NGX_CONF_ERROR;
}
/*** ***/
*ctx = ngx_pcalloc(cf->pool, ngx_event_max_module * sizeof(void *));
if (*ctx == NULL) {
return NGX_CONF_ERROR;
}
*(void **) conf = ctx;
/*** create_conf ***/
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_EVENT_MODULE) {
continue;
}
m = ngx_modules[i]->ctx;
if (m->create_conf) {
(*ctx)[ngx_modules[i]->ctx_index] = m->create_conf(cf->cycle);
if ((*ctx)[ngx_modules[i]->ctx_index] == NULL) {
return NGX_CONF_ERROR;
}
}
}
/*** events ***/
pcf = *cf;
/*** events{} , ctx ***/
cf->ctx = ctx;
cf->module_type = NGX_EVENT_MODULE;
cf->cmd_type = NGX_EVENT_CONF;
/*** events {} ***/
rv = ngx_conf_parse(cf, NULL);
/*** ***/
*cf = pcf;
if (rv != NGX_CONF_OK)
return rv;
/*** init_conf ***/
for (i = 0; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_EVENT_MODULE) {
continue;
}
m = ngx_modules[i]->ctx;
if (m->init_conf) {
rv = m->init_conf(cf->cycle, (*ctx)[ngx_modules[i]->ctx_index]);
if (rv != NGX_CONF_OK) {
return rv;
}
}
}
return NGX_CONF_OK;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.