Nginx 변수 로 밍 (3)
location /test {
set $orig_args $args;
set $args "a=3&b=4";
echo "original args: $orig_args";
echo "args: $args";
}
여기에 원본 URL 매개 변수 문자열 을
$orig_args
변수 에 저장 한 다음 $args 변 수 를 바 꾸 어 현재 URL 매개 변수 문자열 을 수정 합 니 다. 마지막 으로 echo 명령 으로 각각 출력 $orig_args
과 $args 변수의 값 을 출력 합 니 다.다음은 이 /test
인 터 페 이 스 를 이렇게 테스트 합 니 다. $ curl 'http://localhost:8080/test'
original args:
args: a=3&b=4
$ curl 'http://localhost:8080/test?a=0&b=1&c=2'
original args: a=0&b=1&c=2
args: a=3&b=4
첫 번 째 테스트 에서 우 리 는 URL 매개 변수 문자열 을 설정 하지 않 았 기 때문에 출력
$orig_args
변수의 값 이 비어 있 습 니 다.그리고 첫 번 째 와 두 번 째 테스트 에서 우리 가 URL 매개 변수 문자열 을 제공 하 든 안 하 든 매개 변수 문자열 은 location /test
에서 강제로 바 뀝 니 다 a=3&b=4
.특별히 지적 해 야 할 것 은, 이곳 의 $args 변수 와 $arg 입 니 다.XXX 와 마찬가지 로 자신의 저장 값 에 속 하 는 용 기 를 사용 하지 않 습 니 다.$args 를 읽 을 때 Nginx 는 Nginx 핵심 에 현재 URL 매개 변수 문자열 을 저장 하 는 위치 에서 데 이 터 를 읽 는 작은 코드 를 실행 합 니 다.그리고 우리 가 $args 를 고 칠 때 Nginx 는 다른 작은 코드 를 실행 하여 같은 위 치 를 고 칩 니 다.Nginx 의 다른 부분 은 현재 URL 매개 변수 문자열 이 필요 할 때 그 위치 에서 데 이 터 를 읽 기 때문에 $args 에 대한 수정 은 모든 부분의 기능 에 영향 을 줄 수 있 습 니 다.우 리 는 예 를 하나 보 자.
location /test {
set $orig_a $arg_a;
set $args "a=5";
echo "original a: $orig_a";
echo "a: $arg_a";
}
여기 서 우 리 는 먼저 내장 변수
$arg_a
의 값, 즉 원 초적 으로 요청 한 URL 매개 변수 a
의 값 을 사용자 변수 $orig_a
에 저장 한 다음 에 내장 변수 $args 를 할당 하여 현재 요청 한 매개 변수 문자열 을 a=5
로 바 꾸 고 마지막 으로 echo 명령 으로 각각 출력 $orig_a
과 $arg_a
변수의 값 을 출력 합 니 다.내장 변수 $args 에 대한 수정 은 현재 요청 한 URL 매개 변수 문자열 에 직접적인 변 화 를 가 져 올 수 있 기 때문에 내장 변수 $argXXX 도 자연히 변화 한다.테스트 결과 이 점 이 입증 되 었 다. $ curl 'http://localhost:8080/test?a=3'
original a: 3
a: 5
원본 요청 한 URL 매개 변수 문자열 이
a=3
이기 때문에 $arg_a
최초의 값 은 3
이 었 으 나, 이후 $args 변 수 를 바 꾸 어 URL 매개 변수 문자열 을 a=5
로 강제로 수정 하 였 기 때문에 최종 $arg_a
의 값 은 자동 으로 5
로 바 뀌 었 습 니 다.변수 영향 기준 을 수정
$args
한 HTTP 프 록 시 모듈 ngxproxy 의 예: server {
listen 8080;
location /test {
set $args "foo=1&bar=2";
proxy_pass http://127.0.0.1:8081/args;
}
}
server {
listen 8081;
location /args {
echo "args: $args";
}
}
여기에서 우 리 는
http
설정 블록 에서 두 개의 가상 호스트 를 정의 했다.첫 번 째 가상 호스트 감청 8080 포트, 그 /test
인 터 페 이 스 는 스스로 $args 변 수 를 바 꾸 어 현재 요청 한 URL 매개 변수 문자열 을 무조건 foo=1&bar=2
로 수정 한 다음 /test
인 터 페 이 스 를 통 해 ngxproxy 모듈 의 proxypass 명령 은 이 컴퓨터 의 8081 포트 에 있 는 HTTP 서비스 /args
를 가리 키 는 역방향 에이 전 트 를 설정 합 니 다. 기본 값 으로 ngxproxy 모듈 은 HTTP 요청 을 원 격 HTTP 서비스 로 전송 할 때 현재 요청 한 URL 매개 변수 문자열 도 자동 으로 원 격 으로 전송 합 니 다.이 컴퓨터 의 8081 포트 에 있 는 HTTP 서 비 스 는 바로 우리 가 정의 한 두 번 째 가상 호스트 가 제공 하 는 것 입 니 다.저 희 는 두 번 째 가상 호스트
location /args
에서 echo 명령 을 이용 하여 현재 요청 한 URL 매개 변수 문자열 을 출력 하여 /test
인터페이스 가 ngx 를 통과 하 는 지 확인 합 니 다.proxy 모듈 에서 실제 전 송 된 URL 요청 매개 변수 문자열 입 니 다.첫 번 째 가상 호스트 의
/test
인 터 페 이 스 를 실제로 방문 합 니 다. $ curl 'http://localhost:8080/test?blah=7'
args: foo=1&bar=2
URL 매개 변수 문자열
blah=7
을 요청 하 였 으 나 location /test
에서 매개 변수 문자열 이 강제로 foo=1&bar=2
로 바 뀌 었 습 니 다. 이 어 proxypass 명령 은 우리 가 고 쳐 쓴 매개 변수 문자열 을 두 번 째 가상 호스트 에 설 정 된 /args
인터페이스 에 전송 한 다음 /args
인터페이스의 URL 매개 변 수 를 출력 합 니 다.사실은 우리 가 $args 변수 에 대한 할당 작업 도 ngx 에 성공 적 으로 영향 을 미 쳤 음 을 증명 합 니 다.proxy 모듈 의 행동.변 수 를 읽 을 때 실행 되 는 이 특수 코드 는 Nginx 에서 '취 처리 프로그램' (get handler) 이 라 고 합 니 다.변 수 를 바 꿀 때 실행 되 는 이 특수 코드 는 '저장 처리 프로그램' (set handler) 이 라 고 합 니 다.서로 다른 Nginx 모듈 은 일반적으로 그들의 변 수 를 위해 서로 다른 '액세스 처리 프로그램' 을 준비 하여 이러한 변수의 행동 을 마법 으로 가득 채 웁 니 다.
사실 이런 기 교 는 계산 세계 에서 결코 드 물 지 않다.예 를 들 어 대상 을 대상 으로 프로 그래 밍 할 때 클래스 의 디자이너 는 클래스 의 구성원 변 수 를 클래스 의 사용자 에 게 직접 노출 시 키 지 않 고 두 가지 방법 (method) 을 따로 제공 합 니 다. 각각 이 구성원 변수의 읽 기와 쓰기 작업 에 사용 합 니 다. 이 두 가지 방법 은 흔히 '액세스 기' (accessor) 라 고 부 릅 니 다.다음은 C + + 언어의 예 입 니 다.
#include <string>
using namespace std;
class Person {
public:
const string get_name() {
return m_name;
}
void set_name(const string name) {
m_name = name;
}
private:
string m_name;
};
이 이름
Person
의 C + + 클래스 에서 우 리 는 개인 구성원 변수 get_name
의 '액세스 기' 로 서 set_name
와 m_name
두 가지 공공 방법 을 제공 했다.이런 디자인 의 장점 은 명백히 알 수 있다.클래스 의 디자이너 는 '액세스 기' 에서 임의의 코드 를 실행 하여 필요 한 업무 논리 와 '부작용' 을 실현 할 수 있다. 예 를 들 어 현재 구성원 변수 와 의존 관계 가 있 는 다른 구성원 변 수 를 자동 으로 업데이트 하거나 현재 대상 과 관련 된 데이터 라 이브 러 리 표 의 대응 필드 를 직접 수정 할 수 있다.그리고 다음 상황 에 대해 '액세스 기' 에 대응 하 는 구성원 변 수 는 존재 하지 않 거나 존재 하 더 라 도 데이터 캐 시 역할 을 하여 프 록 시 데이터 베이스 에 대한 접근 압력 을 완화 시 킬 수 있 습 니 다.
대상 지향 프로 그래 밍 의 '액세스 기' 개념 과 대응 되 며, Nginx 변수 도 바 인 딩 '액세스 처리 프로그램' 을 지원 합 니 다.Nginx 모듈 은 변 수 를 만 들 때 변수 에 저장 값 을 할당 할 용기 와 읽 기와 쓰기 동작 에 대응 하 는 '액세스 처리 프로그램' 을 스스로 제공 할 지 여 부 를 선택 할 수 있 습 니 다.
모든 Nginx 변수 가 저 장 된 용 기 를 가지 고 있 는 것 은 아 닙 니 다.값 용 기 를 가 진 변 수 는 Nginx 핵심 에서 '인 덱 싱 된' (indexed) 이 라 고 합 니 다.반대로 '색인 되 지 않 은' (non - indexed) 이 라 고 불 린 다.
우리 앞 에 서 는 (2) 에서 이미 알 고 있 습 니 다. $arg 같 습 니 다.XXX 는 이렇게 무수 한 변종 을 가 진 변수 군 으로 '색인 되 지 않 은' 것 이다.이러한 변 수 를 읽 을 때 '취 처리 프로그램' 이 작용 합 니 다. 즉, 현재 요청 한 URL 매개 변수 문자열 을 실시 간 으로 검색 하여 변수 이름 이 지정 한 URL 매개 변수의 값 을 추출 합 니 다.많은 초보 자 들 이 $argXXX 의 실현 방식 에 오해 가 생 겼 습 니 다. Nginx 가 현재 요청 한 모든 URL 인 자 를 미리 분석 하고 관련 $argXXX 변수의 값 을 미리 설정 합 니 다.그러나 사실은 그렇지 않 습 니 다. Nginx 는 URL 매개 변수 문자열 을 미리 해석 하지 않 고 사용자 가 $arg 을 읽 습 니 다.XXX 변 수 를 사용 할 때 '취 처리 프로그램' 을 호출 하여 URL 매개 변수 문자열 을 즉시 검색 합 니 다.유사 하 게, 내장 변수 $cookieXXX 도 '취 처리 프로그램' 을 통 해 요청 헤더 에 있 는 정 의 를 즉시 검색 합 니 다.
(미 완성 계속)
다음으로 이동:http://blog.sina.com.cn/s/blog_6d579ff40100wm63.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.