nginx 모듈 개발 - nginx 내장 변수 증가
5005 단어 nginx
그러나 nginx 에서 우 리 는 아래 의 변 수 를 직접 사용 하여 해당 하 는 값 을 얻 을 수 있 습 니 다.
$arg_매개 변수 이름 location 에서 클 라 이언 트 가 요청 한 인자 xx? name = 123 가 져 오기 그 $argname 은 대응 하 는 값 123 $args 입 니 다. 요청 한 매개 변수 문자열 입 니 다. 예 를 들 어 name = 123 & age = 24 $contentlength, HTTP 요청 메시지 의 "Content - Length" $contenttype, 요청 정보 에 있 는 "Content - type" $host, 요청 정보 에 있 는 "Host", 요청 에 Host 줄 이 없 으 면 설 정 된 서버 이름 $request 와 같 습 니 다.method, 요청 방법, 예 를 들 어 "GET", "POST" 등 $remoteaddr, 클 라 이언 트 주소 $remoteport, 클 라 이언 트 포트 번호 $remoteuser, 클 라 이언 트 사용자 이름, 인증 용; $request_filename, 현재 요청 한 파일 경로 이름 $requesturi, 요청 한 URI, 인자 $querystring, $args 와 같은 $scheme, 사용 하 는 프로 토 콜, 예 를 들 어 http 또는 https, 예 를 들 어 rewrite ^(.+)$ $scheme://example.com$1 redirect $server_protocol, 요청 한 프로 토 콜 버 전, "HTTP / 1.0" 또는 "HTTP / 1.1" $serveraddr, 서버 주소 $servername, 요청 한 서버 이름 $serverport, 요청 한 서버 포트 번호 $uri, 요청 한 URI 는 초기 값 과 다 를 수 있 습 니 다. 예 를 들 어 재 설정 같은 $http헤더 매개 변수 이름 header 의 값 을 얻 을 수 있 습 니 다. 예 를 들 어 $httpuser_에이전트 는 header 에 있 는 UA 를 가 져 오 는 것 입 니 다. 상기 변 수 는 nginx 라 고 불 리 는 내장 변수 입 니 다. 이 변 수 는 nginx 가 시 작 될 때 불 러 옵 니 다. 그리고 서로 다른 모듈 은 서로 다른 내장 변 수 를 불 러 옵 니 다.
static ngx_http_module_t ngx_http_x_module_ctx = {
NULL, /* preconfiguration 。*/
ngx_http_x_post_config, /* postconfiguration 。*/
NULL, /* create main configuration http block 。 , 。 , NULL。*/
NULL, /* init main configuration http block 。 , NGX_CONF_OK。 , NGX_CONF_ERROR */
NULL, /* create server configuration http server block , server block 。 , 。 , NULL。*/
NULL, /* merge server configuration http block, http server block 。 , server server ,
http block server block , , , , 。 。
, NGX_CONF_OK。 , NGX_CONF_ERROR 。*/
NULL, /* create location configuration location block 。 location 。 , 。 , NULL。*/
NULL /* merge location configuration merge_srv_conf , 。 , NGX_CONF_OK。 , NGX_CONF_ERROR 。*/
};
모듈 의 ctx 를 정의 할 때 post configuration 단계 에서 내 장 된 변 수 를 불 러 오 는 함 수 를 정의 합 니 다.static ngx_http_variable_t ngx_http_x_variables[] = {// echo
{ ngx_string("x_request_method"), NULL,
ngx_http_x_request_method_variable, 0,
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("x_request_uri"), NULL,
ngx_http_x_request_uri_variable, 0,
0, 0 },
...
{ ngx_null_string, NULL, NULL, 0, 0, 0 }
}
ngx_http_variable_t 의 정 의 는 ngxhttp_variables. h 중typedef struct ngx_http_variable_s ngx_http_variable_t;
struct ngx_http_variable_s {
ngx_str_t name; //
ngx_http_set_variable_pt set_handler;//
ngx_http_get_variable_pt get_handler;//
uintptr_t data;//
ngx_uint_t flags;//flags ,index ( )
ngx_uint_t index;
};
flag 속성 은 아래 의 몇 가지 속성 으로 조합 되 어 있 습 니 다.#define NGX_HTTP_VAR_CHANGEABLE 1
#define NGX_HTTP_VAR_NOCACHEABLE 2
#define NGX_HTTP_VAR_INDEXED 4
#define NGX_HTTP_VAR_NOHASH 8
NGX_HTTP_VAR_CHANGEABLE
NGX_HTTP_VAR_NOCACHEABLE 는 이 변 수 는 매번 값 을 가 져 가 야 하 며, 지난번 cache 의 값 을 직접 되 돌려 주 는 것 이 아니 라 (대응 하 는 인터페이스 에 맞 춰) 값 을 가 져 가 야 한 다 는 것 을 나타 낸다.
NGX_HTTP_VAR_INDEXED 는 이 변 수 를 색인 으로 읽 었 음 을 표시 합 니 다.
NGX_HTTP_VAR_NOHASH 는 이 변수 가 해시 되 지 않 아 도 된다 는 것 을 나 타 냅 니 다.
static ngx_int_t
ngx_http_x_post_config(ngx_conf_t *cf)
{
...
var nginx
ngx_http_variable_t *var, *v;
for (v = ngx_http_x_variables; v->name.len; v++) {
var = ngx_http_add_variable(cf, &v->name, v->flags);
if (var == NULL) {
return NGX_ERROR;
}
var->get_handler = v->get_handler;
var->data = v->data;
}
return NGX_OK;//
}
post configuration 의 리 셋 에 사용자 정의 변 수 를 nginx 에 추가 하면 설정 파일 에 $x 를 직접 사용 할 수 있 습 니 다.request_uri 획득 ngxhttp_x_request_uri_variable 함수 의 반환 값.마지막 으로 변수 값 을 가 져 오 는 함 수 를 보 겠 습 니 다.
ngx_int_t ngx_http_x_request_uri_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
if (r->uri.len) {
v->len = r->uri.len;
v->valid = 1;
v->no_cacheable = 1;
v->not_found = 0;
v->data = r->uri.data;
} else {
v->not_found = 1;
}
return NGX_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에 따라 라이센스가 부여됩니다.