nginx 소스 학습 노트 (4) - nginx 정수 - 모듈
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
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 계승, 이 계승 은 원본 코드 에서 모듈 컨 텍스트 의 통합 설정 인 터 페 이 스 를 호출 하여 이 루어 집 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.