nginx 소스 학습 노트 (5) - nginx 정수 - 모듈

3161 단어 nginx
우리 가 전에 말 했 듯 이 모듈 의 상하 문 은 각각 네 가지 구조 체 에 대응한다.
ngx_core_module_t、
ngx_event_module_t、
ngx_http_module_t、
ngx_mail_module_t
각각 대응 4 가지 모듈
src/core/ngx_conf_file.h
typedef struct {
    ngx_str_t             name;
    void               *(*create_conf)(ngx_cycle_t *cycle);
    char               *(*init_conf)(ngx_cycle_t *cycle, void *conf);
} ngx_core_module_t;


src/event/ngx_event.h
typedef struct {
    ngx_int_t  (*add)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
    ngx_int_t  (*del)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);

    ngx_int_t  (*enable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
    ngx_int_t  (*disable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);

    ngx_int_t  (*add_conn)(ngx_connection_t *c);
    ngx_int_t  (*del_conn)(ngx_connection_t *c, ngx_uint_t flags);

    ngx_int_t  (*process_changes)(ngx_cycle_t *cycle, ngx_uint_t nowait);
    ngx_int_t  (*process_events)(ngx_cycle_t *cycle, ngx_msec_t timer,
                   ngx_uint_t flags);

    ngx_int_t  (*init)(ngx_cycle_t *cycle, ngx_msec_t timer);
    void       (*done)(ngx_cycle_t *cycle);
} ngx_event_actions_t;
typedef struct {
    ngx_str_t              *name;

    void                 *(*create_conf)(ngx_cycle_t *cycle);
    char                 *(*init_conf)(ngx_cycle_t *cycle, void *conf);

    ngx_event_actions_t     actions;
} ngx_event_module_t;



src/http/ngx_http_config.h
typedef struct {
ngx_int_t (*preconfiguration)(ngx_conf_t *cf);
ngx_int_t (*postconfiguration)(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; 

src/mail/ngx_mail.h
typedef struct {
ngx_mail_protocol_t *protocol;

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);
} ngx_mail_module_t;

이 네 개의 구조 체 는 모두 갈 고 리 를 제공 하여 모듈 이 문맥 과 관련 된 조작 을 등록 할 수 있 도록 하고 핵심 모듈 은 core 와 event 모듈 도 create 를 제공 합 니 다.conf 와 initconf 두 개의 갈 고 리 는 그 밖 에 조작 시간의 갈 고 리 를 제공 합 니 다.http 모듈 은 설정 파일 을 읽 는 전후 와 mail / src / loc 설정 항목 을 조작 할 때 실행 되 는 갈 고 리 를 제공 합 니 다.mail 모듈 도 http 모듈 과 유사 한 갈 고 리 를 제공 하지만 http 모듈 보다 간단 합 니 다.
core 모듈, 그 는 시스템 의 많은 부분 에 설정 할 것 입 니 다. 예 를 들 어 errlog 모듈 은 오류 로 그 를 작성 하 는 것 을 책임 집 니 다.
이벤트 모듈 은 시간 구동 과 관련 된 모듈 로 nginx 는 서로 다른 운영 체제 에서 서로 다른 커 널 체 제 를 사용 합 니 다. 예 를 들 어 Liux 에서 epoll 모듈 을 사용 할 수 있 습 니 다.
http 모듈 식 은 http 입력 을 처리 하고 출력, 여과 출력, 부하 균형 등 모듈 을 만 드 는 데 사 용 됩 니 다. 이것 은 nginx 가 웹 서버 의 핵심 부분 입 니 다.
mail 모듈 은 메 일 에이 전 트 를 실현 하 는 모듈 로 smtp / pop 3 / imap 등 프로 토 콜 의 메 일 에이 전 트 를 실현 합 니 다.
여기까지 말씀 드 리 면 nginx 에 대해 대체적으로 인식 하 시기 바 랍 니 다. 적어도 모듈 에서 할 수 있 습 니 다. 사실은 지금 은 소스 코드 를 정독 하기 시 작 했 음 을 확인 할 수 있 습 니 다. 그러나 세부 사항 을 잘 이해 하기 위해 우 리 는 소스 코드 를 읽 기 전에 nginx 의 관련 데이터 구 조 를 배 워 야 합 니 다.

좋은 웹페이지 즐겨찾기