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

3892 단어
다음은 Hello World 모듈 의 명령 을 계속 이해 합 니 다.
helloworld    
/* Commands */
static ngx_command_t  ngx_http_hello_world_commands[] = {
    { ngx_string("hello_world"),
      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_http_hello_world,
      0,
      0,
      NULL },
    ngx_null_command
};

코드 가 있 으 면 모듈 의 명령 이 원본 코드 에서 ngxcommand_t 구조의 변수, ngxcommand_t 의 성명 은 src / core / ngxconf_file. h 중:
struct ngx_command_s {
    ngx_str_t             name;
    ngx_uint_t            type;
    char               *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
    ngx_uint_t            conf;
    ngx_uint_t            offset;
    void                 *post;
};

각 변수의 구체 적 인 의 미 를 일일이 비교 해 보 자.
name 은 명령 이름 의 문자열 을 말 합 니 다. 빈 칸 을 포함 할 수 없습니다.
 
type 은 설정 파일 의 위 치 를 설정 하 는 데 사용 되 는 명령 입 니 다. 어느 부분 에서 사용 하 는 것 이 합 법 적 인 선택 값 입 니까? (src / core / ngx conf file. h 에 매개 변수 설정 정 보 를 저장 하고 다른 모듈 에 위치 선택 값 을 포함 합 니 다) 다음 과 같 습 니 다.
 
src/core/ngx_conf_file.h       
#define NGX_CONF_NOARGS      0x00000001        //      
#define NGX_CONF_TAKE1       0x00000002          //    2   
#define NGX_CONF_TAKE2       0x00000004           //….
#define NGX_CONF_TAKE3       0x00000008
#define NGX_CONF_TAKE4       0x00000010
#define NGX_CONF_TAKE5       0x00000020
#define NGX_CONF_TAKE6       0x00000040
#define NGX_CONF_TAKE7       0x00000080

#define NGX_CONF_MAX_ARGS    8

#define NGX_CONF_TAKE12      (NGX_CONF_TAKE1|NGX_CONF_TAKE2)  // 1  2   
#define NGX_CONF_TAKE13      (NGX_CONF_TAKE1|NGX_CONF_TAKE3) 

#define NGX_CONF_TAKE23      (NGX_CONF_TAKE2|NGX_CONF_TAKE3)

#define NGX_CONF_TAKE123     (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3)
#define NGX_CONF_TAKE1234    (NGX_CONF_TAKE1|NGX_CONF_TAKE2|NGX_CONF_TAKE3   \
                              |NGX_CONF_TAKE4)

#define NGX_CONF_ARGS_NUMBER 0x000000ff
#define NGX_CONF_BLOCK       0x00000100  //      {…}   events{…}
#define NGX_CONF_FLAG        0x00000200   //    1      
#define NGX_CONF_ANY         0x00000400   
#define NGX_CONF_1MORE       0x00000800  //        
#define NGX_CONF_2MORE       0x00001000
#define NGX_CONF_MULTI       0x00002000  //    


      src/http/ngx_http_config.h 
#define NGX_HTTP_MAIN_CONF        0x02000000        //               
#define NGX_HTTP_SRV_CONF         0x04000000           //     server          
#define NGX_HTTP_LOC_CONF         0x08000000          //     location      
#define NGX_HTTP_UPS_CONF         0x10000000          //     upstream        
#define NGX_HTTP_SIF_CONF         0x20000000           //…
#define NGX_HTTP_LIF_CONF         0x40000000
#define NGX_HTTP_LMT_CONF         0x80000000

책 을 읽 는 메 시 지 는 nginx 를 설정 한 경험 이 있 기 를 바 랍 니 다. 그렇지 않 으 면 깊이 이해 하지 못 할 수도 있 습 니 다.
 
set 는 함수 포인터 입 니 다. 이 함 수 는 설정 파일 에서 이 명령 의 인자 (ngx conf t 에 저장) 를 적당 한 데이터 형식 으로 바 꾸 고 변 환 된 값 을 모듈 의 설정 구조 체 (viod * conf) 에 저장 합 니 다. 이 설정 구조 체 는 void * 로 가리 키 며 앞에서 말 했 듯 이 각 모듈 의 구조 체 는 다 릅 니 다.이것 은 바로 이 반전 함수 의 세 가지 매개 변수 입 니 다. 이 구조 체 의 이름 형식 은: ngx _conf_t,
offset 은 주로 변 환 된 값 을 저장 하여 구조 체 의 오프셋 을 설정 합 니 다.
 
모든 모듈 이 하나의 설정 구조 체 를 정의 하 는 것 은 아 닙 니 다. set 는 간단 한 조작 함수 일 수도 있 기 때문에 설정 에서 (ngx conf t) 데 이 터 를 읽 고 간단 한 조작 을 할 수 있 습 니 다. 예 를 들 어 errlog 모듈 의 'error log' 명령 은 ngx 를 호출 하 는 것 입 니 다.error_로그 에 로 그 를 쓰 십시오. 설정 데 이 터 를 저장 할 필요 가 없습니다.
 
conf 와 offset, offset 앞에서 언급 했 듯 이 구성 체 의 구성원 의 오프셋 입 니 다.conf 도 오프셋 값 이지 만 파일 구조 체 를 설정 하 는 (ngx conf t) 구성원 ctx 의 구성원 오프셋 입 니 다. 일반적으로 ctx 에서 오프셋 위 치 를 지정 한 구성원 을 void * conf 에 할당 합 니 다.
post 는 모듈 이 설정 을 읽 을 때 필요 한 자질구레한 변 수 를 가리킨다.위의 분석 을 통 해 알 수 있 듯 이 각 모듈 은 설정 파일 의 특정한 위치 에 투사 되 고 전체 위치의 설정 은 다음 단계 의 설정 에 의 해 계승 된다. 예 를 들 어 httpmain httpsvr 계승, httpsvr 는 httploc 계승, 이 계승 은 원본 코드 에서 모듈 컨 텍스트 의 통합 설정 인 터 페 이 스 를 호출 하여 이 루어 집 니 다.

좋은 웹페이지 즐겨찾기