Nginx 설정 명령 의 실행 순서 (2)
11697 단어 nginx
location
블록 을 설정 할 때 현재 요청 한 것 입 니 다. rewrite
단계 적 운행.사실 이 문맥 에서 ngx_rewrite 모듈 의 거의 모든 명령 이 실행 되 고 있 습 니 다. rewrite
단계 Nginx 변수 로 밍 (2) 소개 rewrite 지령그러나 주의해 야 할 것 은 이 명령 들 이 server
블록 을 설정 할 때 우리 가 언급 하지 않 은 더 빠 른 처리 단계 에서 실 행 됩 니 다. server-rewrite
단계Nginx 변수 로 밍 (2) 소개 ngx_set_misc 모듈 러 set_unescape_uri 명령 도 실행 중 입 니 다.
rewrite
단계.특별히 모듈 의 명령 은 그런대로 괜찮다. ngx_set_misc 라 는 명령 을 섞 어 순서대로 집행 했다.우 리 는 이러한 예 를 보 자. location /test {
set $a "hello%20world";
set_unescape_uri $b $a;
set $c "$b!";
echo $c;
}
이 인터페이스 에 접근 하면 다음 을 얻 을 수 있 습 니 다:
$ curl 'http://localhost:8080/test'
hello world!
우 리 는 보 았 다. ngx_rewrite 문장의 앞 뒤 set_unescape_uri 문 구 는 모두 글 을 쓸 때의 순서에 따라 앞 뒤로 집행 되 었 다.
이 점 을 더 확인 하기 위해 서 는 Nginx 의 '디 버 깅 로그' 를 다시 한 번 확인 해 보 자. set 중간 단계):
grep -E 'http script (value|copy|set)' t/servroot/logs/error.log
걸 러 낸 디 버 깅 로그 정 보 는 다음 과 같 습 니 다.
[debug] 11167#0: *1 http script value: "hello%20world"
[debug] 11167#0: *1 http script set $a
[debug] 11167#0: *1 http script value (post filter): "hello world"
[debug] 11167#0: *1 http script set $b
[debug] 11167#0: *1 http script copy: "!"
[debug] 11167#0: *1 http script set $c
시작 두 줄 정보
[debug] 11167#0: *1 http script value: "hello%20world"
[debug] 11167#0: *1 http script set $a
우리 의 설정 문 에 대응 합 니 다.
set $a "hello%20world";
다음 두 줄 은
[debug] 11167#0: *1 http script value (post filter): "hello world"
[debug] 11167#0: *1 http script set $b
대응 설정 문
set_unescape_uri $b $a;
우 리 는 첫 줄 의 정보 와 (1) 지령 에 약간의 차이 가 있다.
"(post filter)"
이 표 시 는 마지막 으로 URI 디 코딩 작업 이 우리 가 원 하 는 것 처럼 작 동 하 는 것 을 보 여 줍 니 다. 즉, "hello%20world"
여기 서 성공 적 으로 디 코딩 되 었 습 니 다. "hello world"
. 마지막 두 줄 디 버 깅 정보
[debug] 11167#0: *1 http script copy: "!"
[debug] 11167#0: *1 http script set $c
마지막 set 문장:
set $c "$b!";
이 명령 이
$c
변수 할당 시 '변수 삽입 값' 기능 을 사 용 했 기 때문에 첫 번 째 줄 디 버 깅 정 보 는 다음 과 같 습 니 다. http script copy
시작, 뒤쪽 은 최종 값 을 맞 추 는 문자열 상수 입 니 다. "!"
. 이 디 버 깅 정 보 를 연결 해 보면 우 리 는 이러한 설정 명령 의 실제 실행 순 서 는 다음 과 같다 는 것 을 알 수 있다.
set $a "hello%20world";
set_unescape_uri $b $a;
set $c "$b!";
이것 은 설정 파일 에 있 는 쓰기 순서 와 완전히 일치 합 니 다.
우리 set 제3자 모듈 Nginx 변수 로 밍 (7) ngx_lua 설정 명령 도 set_by_lua 모듈 의 명령 과 마찬가지 로 ngx_set_misc 모듈 의 명령 을 혼합 하여 사용 합 니 다.ngx_rewrite 명령 은 사용자 Lua 코드 를 통 해 결 과 를 계산 한 다음 지정 한 Nginx 변 수 를 부여 하 는 것 을 지원 합 니 다.화해시키다 set_by_lua 명령 이 비슷 하 다. set 명령 도 존재 하지 않 는 Nginx 변 수 를 자동 으로 만 드 는 기능 이 있다.
다음은 하나만 볼 게 요. set_by_lua 명령 set_by_lua 명령 어 혼합 사용 예:
location /test {
set $a 32;
set $b 56;
set_by_lua $c "return ngx.var.a + ngx.var.b";
set $equation "$a + $b = $c";
echo $equation;
}
여기 우리 먼저
$a
화해시키다 $b
변수 가 각각 초기 화 됨 32
화해시키다 56
그리고 이용 set 명령 은 우리 가 지정 한 Lua 코드 를 연결 하여 Nginx 변 수 를 계산 합 니 다. $a
화해시키다 $b
의 "대수 와" (sum), 그리고 변 수 를 부여 합 니 다. $c
이어서 '변수 삽입 값' 기능 을 이용 하여 변 수 를 $a
、 $b
화해시키다 $c
값 을 문자열 형식의 등식 으로 연결 하여 변 수 를 부여 합 니 다. $equation
마지막 에 쓰 세 요. set_by_lua 명령 출력 $equation
의 값.이 예 에서 주의해 야 할 점 은: 우선, 우 리 는 Lua 코드 에서 통과 했다. echo 인터페이스 에서 Nginx 변 수 를 읽 기
$VARIABLE
의그 다음으로 Nginx 변수의 값 은 문자열 이라는 형식 만 있 기 때문에 Lua 코드 에서 읽 습 니 다. ngx.var.a
와 ngx.var.b
Lua 문자열 형식의 값 을 얻 었 습 니 다. "32"
화해시키다 "56"
;이 어 우 리 는 두 문자열 에 대해 덧셈 연산 을 하면 Lua 가 덧셈 에 대해 자동 형식 변환 을 촉발 할 것 이다 (Lua 는 두 개의 덧셈 을 먼저 수치 형식 으로 바 꾸 고 다시 합 칠 것 이다).그리고 우 리 는 Lua 코드 에서 최종 결 과 를 통과 시 켰 다. return
문 구 는 밖의 Nginx 변 수 를 되 돌려 줍 니 다. $c
;마지막 으로 ngx.var.VARIABLE 모듈 $c
실제 할당 전에 도 return
구문 이 되 돌려 주 는 수치 형식의 결과, 즉 Lua 덧셈 으로 계 산 된 '와' 는 자동 으로 문자열 로 변 환 됩 니 다 (이것 은 Nginx 변수의 값 이 문자열 일 수 밖 에 없 기 때 문 입 니 다).이 예 의 실제 운행 결 과 는 우리 의 기대 에 부합된다.
$ curl 'http://localhost:8080/test'
32 + 56 = 88
그래서 이것 이 검증 되 었 다 ngx_lua 지령 도 확실히 set_by_lua 이런 set 모듈 이 제공 하 는 명령 을 한데 섞 어 작업 하 다.
그리고 적지 않 은 제3자 모듈, 예 를 들 면 ngx_rewrite 소개 Nginx 변수 로 밍 (8) 사용자 세 션 복호화 (session) 에 사용 할 ngx_array_var ngx_encrypted_session 모듈 의 명령 이음매 없 는 혼합 작업.
스 탠 더 드 ngx_rewrite 모듈 의 응용 이 이렇게 광범 위 하기 때문에 설정 명령 과 혼합 하여 사용 할 수 있 는 제3자 모듈 은 행운 입 니 다.사실 위 에서 언급 한 이 제3자 모듈 들 은 모두 특수 한 기술 을 사용 하여 그들의 배치 명령 을 '주입' 시 켰 다. ngx_rewrite 모듈 의 명령 시퀀스 에서 (Marcus Clyne 이 작성 한 제3자 모듈 을 빌 렸 습 니 다. ngx_rewrite )。다시 말 하면, 더 많은 일반적인 것 은 Nginx 에 있다.
rewrite
단계 등록 과 실행 명령 의 제3자 모듈 은 그다지 운 이 좋 지 않다.이 "일반 모듈" 의 명령 도 실행 되 고 있 지만 rewrite
단계 ngx_devel_kit 모듈 (그리고 같은 단계 의 다른 모듈) 은 모두 분리 되 어 독립 적 으로 집행 된다.실행 할 때 서로 다른 모듈 의 설정 명령 집합 간 의 선후 순 서 는 일반적으로 불확실 하 다 (엄 밀 히 말 하면 모듈 의 로드 순서 에 의 해 결정 되 지만 예외 적 인 경우 도 있다).예 를 들 면 A
화해시키다 B
두 모듈 다 있어 요. rewrite
단계 실행 명령 A
모듈 의 모든 명령 을 다 실행 하고 실행 합 니 다. B
모듈 의 명령 들 은 반대로, B
명령 을 모두 실행 하고 실행 합 니 다. A
라 는 지령 을 내 렸 다.모듈 문서 에 명확 한 설명 이 있 는 경 우 를 제외 하고 사용 자 는 이러한 불확실 한 순서 에 의존 하 는 설정 을 작성 해 서 는 안 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.