nginx 스 크 립 트 엔진 과 디자인 (3)
여기 우리 관심 ngxhttp_core_main_conf_t (다음은 cmcf 라 고 약칭) 구조 중의 이 두 구성원, cmcf - > variableskeys 와 cmcf - > variables, 그 중 variableskeys 는 hash 배열 입 니 다. 변수 hash 값 은 같은 배열 에 넣 고 유일한 것 입 니 다. 반복 할 때 오 류 를 보고 합 니 다.중요 한 것 은 이 hash 배열, 즉 cmcf - > variables 입 니 다.keys 는 전체 시스템 에서 미리 정 의 된, 사용자 정의, 거의 모든 변 수 를 저장 합 니 다. (일부 특정한 접두사 변 수 는 'http' 등 을 제외 하고 함수 ngx http variables init vars 에 열 거 됩 니 다.)
우 리 는 항목 별로 본다.
1. 시스템 에 사용 할 수 있 는 모든 변 수 는 cmcf - > variableskeys 중.
2. 설정 에 나타 난 변 수 는 cmcf - > variables 에 넣 습 니 다.전체적으로 보면 특정한 접두사 가 있 는 변 수 를 제외 하고 cmcf - > variables 는 ngx 라 고 볼 수 있 습 니 다.http_variables_init_vars 의 부분 집합.이 디자인 을 통 해 알 수 있 듯 이 시스템 정의 변 수 는 처 리 를 요청 할 때 모두 사용 되 지 않 습 니 다. 우 리 는 설정 에 따라 유용 한 것 을 얻 으 면 됩 니 다. 그래서 cmcf - > variableskeys temp 사용pool (실제 요 소 는 cf - > pool) 을 사용 합 니 다. variables 가 변 수 를 수집 한 후에 variables키 구조 도 소 용 없어.
3. cmcf - > variables 는 배열 입 니 다. 요소 유형 은 ngx 입 니 다.http_variable_t。
struct ngx_http_variable_s {
//
ngx_str_t name;
// request , set
ngx_http_set_variable_pt set_handler;
// request ( uri,args ) ,r->variables 。
ngx_http_get_variable_pt get_handler;
// , , // data
uintptr_t data;
// , ,
ngx_uint_t flags;
// cmcf->variables
ngx_uint_t index;
};
4. init 에서request 단계 에서 우 리 는 이러한 처리 가 있 는 것 을 보 았 다.
r->variables =ngx_pcalloc(r->pool, cmcf->variables.nelts * sizeof(ngx_http_variable_value_t));
여기 서 디자인 사상 은 이 렇 습 니 다. cmcf - > variables 는 모든 변수의 처리 정보의 패키지 이 고 r - > variables 안 에는 이 변 수 를 처리 하여 얻 은 내용 (즉 value) 이기 때문에 cmcf - > variables 와 r - > variables 는 일일이 대응 합 니 다. 구성원 간 에는 var 대 value 의 관계 입 니 다. 이것 은 이곳 의 var 와 value 는 많은 정 보 를 담 은 구조 입 니 다.단순 한 값 이나 문자열 이 아 닙 니 다.여기 r - > variables 멤버 들 을 살 펴 보 겠 습 니 다.
typedef struct {
unsigned len:28;
unsigned valid:1; // ,
// , get_handler , // 。
unsigned no_cacheable:1;
// ( ), “not found”!
unsigned not_found:1;
unsigned escape:1; // ,
u_char *data;
} ngx_variable_value_t;
우 리 는 이 구조 에서 직접 변 수 를 나타 내 는 포인터 와 크기 (즉, data 와 len) 를 처리 하 는 것 을 보 았 고 나머지 는 모두 태그 비트 입 니 다.
다음은 매크로 몇 개 를 보 겠 습 니 다.
#define NGX_HTTP_VAR_CHANGEABLE 1
#define NGX_HTTP_VAR_NOCACHEABLE 2
#define NGX_HTTP_VAR_INDEXED 4
#define NGX_HTTP_VAR_NOHASH 8
1. NGX_HTTP_VAR_CHANGEABLE
이 매크로 를 사용 할 때 이 변 수 는 반복 적 으로 설정 할 수 있 음 을 의미 합 니 다. 일반적으로 설정 한 것 은 앞의 설정 을 덮어 씁 니 다.예:
set $file $1
set $file $2
그러면 결 과 는 file 의 최종 값 이 2 달러 로 대표 된다.
2. NGX_HTTP_VAR_NOCACHEABLE
이 매크로 가 영향 을 미 치 는 것 은 바로 ngxvariable_value_t 구조 중의 nocacheable, 앞에서 설명 한 바 와 같이 이 표 시 된 변 수 는 모두 get 을 통 해handler 는 변수의 값 을 가 져 옵 니 다.다음 함수 와 같이:
ngx_http_get_flushed_variable(ngx_http_request_t *r, ngx_uint_tindex)
{
ngx_http_variable_value_t *v;
v = &r->variables[index];
// , , NGX_HTTP_VAR_NOCACHEABLE, // cmcf->variables 。
if (v->valid) { // ,
if (!v->no_cacheable) { // ,
return v;
}
// NGX_HTTP_VAR_NOCACHEABLE , …
v->valid = 0;
v->not_found = 0;
}
// , ,
returnngx_http_get_indexed_variable(r, index);
}
이러한 변 수 는 특정한 요청 과 밀접 한 관 계 를 가진다. 예 를 들 어 host, uri, args 와 같은 것 은 처리 할 때 새로운 값 을 다시 가 져 올 때마다 필요 하 다.
3. NGX_HTTP_VAR_INDEXED 와 NGXHTTP_VAR_NOHASH
이 두 매크로 는 주로 SSI 관련 처리 에 사용 되 며, ssi 의 처 리 는 cmcf - > variables 를 사용 해 야 합 니 다.hash, 이것 은 hash 표 입 니 다. 변 수 를 효율적으로 찾 을 수 있 습 니 다.NGX_HTTP_VAR_NOHASH 형식의 변 수 는 이 hash 표 에 전혀 들 어가 지 않 습 니 다. hash 표 에서 찾 은 변 수 는 ngx 입 니 다.http_variable_t 구조, 만약 우리 가 그것 의 flags 에서 NGX 를 발견 한다 면HTTP_VAR_INDEXED 표 시 는 r - > variables 에서 직접 찾 을 수 있 음 을 의미 합 니 다. 찾 은 후에 사용 할 수 있 는 지 여 부 는 따로 판단 해 야 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.