nginx 변수 학습 초보 - 장 이 춘 블 로 그 를 읽 고 필 기 를 합 니 다.
6716 단어 기초 학습
다음은 agentzh (장 이 춘) 의 nginx 튜 토리 얼 및 구 글 선생님 을 참고 합 니 다.
set
–
location /hi{
set $a "hi";
return 200 "hello";
}
hi
입 니 다. 주의해 야 할 것 은 Nignx 가 시 작 될 때 변 수 는 만 들 어 졌 지만 구체 적 으로 실 행 된 후에 변 수 는 할당 되 었 습 니 다. 즉, 생 성과 할당 은 분 리 된 것 입 니 다.–
nginx 는 내 장 된 변수 군 이 많 습 니 다.
$arg_xxx
에서 xxx 라 는 요청 파 라 메 터 를 얻 을 수 있 고 모든 get 의 파 라 메 터 를 소문 자로 자동 으로 바 꾼 후에 일치 할 수 있 습 니 다.location /hi{
add_header oriuri $uri;
add_header requri $request_uri;
add_header post $arg_post;
return 301 "www.baidu.com";
}
curl hongjian.cn/hi?post=helloworld -v
< HTTP/1.1 301 Moved Permanently
< Server: nginx
< Date: Sun, 23 Apr 2017 10:10:12 GMT
< Content-Type: text/html
< Content-Length: 178
< Connection: keep-alive
< Location: www.baidu.com
< oriuri: /hi
< requri: /hi?post=helloworld
< post: helloworld
argXXX 와 같은 내장 변수 가 적지 않 습 니 다. 예 를 들 어 쿠키 값 을 가 져 오 는 cookieXXX 변수 군, 요청 헤드 를 가 져 오 는 httpXXX 변수 군, 응답 헤드 를 가 져 오 는 senthttp_XXX 변수 군.여기 일일이 소개 하지 않 겠 습 니 다. 관심 이 있 으 시 면 ngx 를 참고 하 세 요.http_코어 모듈 의 공식 문서 입 니 다.
대부분의 내장 변 수 는 읽 을 수 있 는 것 일 뿐 할당 을 하면 nginx 타 임 스 를 시작 하 는 중 오류 가 발생 합 니 다.
취 처리 및 저장 처리
–
모든 Nginx 변수 가 저 장 된 용 기 를 가지 고 있 는 것 은 아 닙 니 다.
의 변 수 는 Nginx 핵심 에서 '색인 되 는' (indexed) 이 라 고 불 린 다.반대로 '색인 되 지 않 은' (non - indexed) 이 라 고 불 린 다.$arg_xxx
색인 되 지 않 은 변수 입 니 다.유사 한
$arg_xxx
내 변수 군 을 읽 을 때 nginx 는 해당 하 는 읽 기 처리 프로그램 을 실행 하여 URL 의 매개 변수 문자열 을 검색 하여 이 변수의 값 을 가 져 옵 니 다. $cookie_xxx
도 마찬가지 입 니 다.nginx 값 용기 캐 시
–
http{
map $arg_method $ret {
GET 1;
POST 2;
PUT 3;
DELETE 4;
default 5;
}
server {
location /hi {
#set $arg_method get;
return 200 "ret:$ret";
}
}
여기 서 우 리 는 nginx 의 맵 맵 맵 규칙 을 사용 했다.이 맵 은 http 모듈 에서 만 마 운 트 해제 할 수 있 기 때문에 전역 적 입 니 다.여기 서 요청 상황 을 살 펴 보도 록 하 겠 습 니 다.
curl hongjian.cn/hi\?method=post
ret:2
curl hongjian.cn/hi\?method=POST
ret:2
요청 매개 변수 중의 method 는 map 의 규칙 에 따라 대응 값 으로 매 핑 되 고 nginx 는 매개 변 수 를 소문 자로 바 꾸 어 비교 하 는 것 을 볼 수 있 습 니 다.
위의 set 문 구 는 주석 이 풀 렸 음 을 알 수 있 습 니 다. 주석 을 열 고 다시 방문 하 겠 습 니 다.
curl hongjian.cn/hi\?method=POST
ret:1
반환 값 이 1 이 되면 여기 서 하나의 사실 을 입증 하고 수치 (ret) 를 취 할 때 만 계산 할 수 있 습 니 다. 여기 서 우 리 는 이런 현상 을
이 라 고 부 릅 니 다.캐 시 와 무슨 관계 가 있 는 지 아직 보이 지 않 습 니 다. 작은 조정 을 하 겠 습 니 다.http{
map $arg_method $ret {
GET 1;
POST 2;
PUT 3;
DELETE 4;
default 5;
}
server {
location /hi {
set $ret1 $ret;
set $arg_method default;
set $ret2 $ret;
return 200 "ret1:$ret, ret2:$ret2";
}
}
방문 하여 요청 결 과 를 보십시오.
curl hongjian.cn/hi\?method=post
ret1:2, ret2:2
ret2
저희 가 method 변 수 를 default 로 설정 해서 변 하지 않 았 습 니 다. 왜 일 까요?원래 nginx 는 생 성 된 변 수 를 위해 값 용 기 를 캐 시 로 선택 할 수 있 습 니 다. ngxmap 라 는 구 조 는 계산 비용 이 많이 드 는 것 으로 인정 되 어 캐 시 를 진행 합 니 다. 타성 계산 으로 인해 ret
에 대한 추출 프로그램 을 처음 실행 할 때 만 ret 의 map 결 과 를 계산 하고 이 값 을 캐 시 로 사용 합 니 다. 그 후에 우 리 는 method
의 값 을 수정 하 더 라 도 다음 문 구 는 추출 프로그램 을 실행 할 때 지난번 캐 시 결 과 를 되 돌려 줍 니 다.
따라서 이러한 전역 적 인 맵 구 조 는 요청 한 첫 번 째 추출 프로그램 이 실 행 될 때 만 한 번 계산 되 고 나중에 추출 프로그램 을 실행 할 때 캐 시 결 과 를 사용 합 니 다.
능 동적 계산 도 흔 하 다.
예 를 들 어
set
할당 작업 은 즉시 계산 하고 결 과 를 변수 에 할당 합 니 다.부자 의 요청 에 대하 여
–
여기 서 말 하 는 하위 요청 은 진정한 의미 의 하위 HTTP 요청 이 아니 라 제3자 모듈, 예 를 들 어 ngxlocation 에서 시 작 된 C 언어의 호출 일 뿐 부자 요청 간 에 변수 에 대한 공유 도 있 고 공유 되 지 않 은 것 도 있 으 며 만 나 서 구체 적 인 조회 와 분석 을 한다.