Nginx 설정 명령 의 실행 순서 (9)

10691 단어 nginx
잇따르다  server-rewrite  단계 뒤에  find-config  단계이 단 계 는 Nginx 모듈 등록 처리 프로그램 을 지원 하지 않 고 Nginx 핵심 으로 현재 요청 과  location  블록 간 의 짝 짓 기 작업 을 설정 합 니 다.이 단계 까지 는 요청 이 없 었 다 는 얘 기다.  location  블록 연결 설정.그래서  find-config  단계 이전의  post-read  화해시키다  server-rewrite  단계  server  블록 설정 및 더 바깥쪽 역할 영역 에서 의 설정 명령 이 작 동 합 니 다.이것 이 바로 왜 server 에 만 쓰 여 있 는 것 입 니까? 설정 블록의  ngx_rewrite  모듈 명령 이 실 행 됩 니 다.  server-rewrite  단계, 이것 도 왜 앞의 모든 예 중의  ngx_realip  모듈 의 지령 도 모두 특별히 쓰 여 있다  server  블록 에 등록 할 수 있 도록 설정 합 니 다.  post-read  단계 의 처리 절 차 는 효력 이 발생 할 수 있다.
 
    Nginx 가 있 을 때  find-config  단계 가 하나 일치 하 는 데 성공 하 였 습 니 다  location  블록 을 설정 하면 오류 로그 파일 에 디 버 깅 정 보 를 즉시 인쇄 합 니 다.우 리 는 이러한 예 를 보 자.
    location /hello {
        echo "hello world";
    }

Nginx 의 '디 버 깅 로그' 를 사용 하면 요청 합 니 다.  /hello  인터페이스  error.log  파일 에서 다음 줄 의 정 보 를 걸 러 냅 니 다:
    $ grep 'using config' logs/error.log
    [debug] 84579#0: *1 using configuration "/hello"

우 리 는 여기에 놓 을 수 있 도록 정보 줄 의 첫 번 째 시간 표를 생략 했다.
 
    운행  find-config  단계 뒤의 것 은 바로 우리 의 오 랜 친구 이다.  rewrite  단계이미  find-config  단계 현재 요청 완료 및  location  그래서  rewrite  단계 시작, location 블록 에 있 는 명령 을 설정 하면 역할 을 할 수 있 습 니 다.앞에서 이미 소개 하 였 다.  ngx_rewrite  모듈 명령  location  블록 에서 실 행 될 때 바로 이것 입 니 다.  rewrite  단계그리고 ngx_set_misc 모듈 의 명령 도 마찬가지 입 니 다. 그리고...  ngx_lua  모듈 러  set_by_lua  지령  rewrite_by_lua  지령 도 예 외 는 아니다.
 
     rewrite  단 계 를 뒤로 미 루 는 것 이 소위 말 하 는 것 이다.  post-rewrite  단계이 단계 도 비슷 해 요.  find-config  단 계 는 Nginx 모듈 등록 처리 프로그램 을 받 아들 이지 않 고 Nginx 핵심 으로 이 루어 집 니 다.  rewrite  단계 에서 요구 하 는 '내부 점프' 동작 (만약  rewrite  단계 에 이런 요구 가 있다 면).이전  (2)  '내부 도약' 이라는 개념 을 소개 하면 서 어떻게 통과 하 는 지 보 여 줬 다.  echo_exec  명령 혹은  rewrite  내부 도약 을 명령 하 다.... 때문에  echo_exec  명령 어 실행  content  단계  post-rewrite  단계 와 상 관 없 이 우리 가 흥 미 를 느끼 는 것 은 운행 만 남 았 다.  rewrite  단계 적  rewrite  지령돌 이 켜 보다  (2)  보 여 준 이 예:
    server {
        listen 8080;
 
        location /foo {
            set $a hello;
            rewrite ^ /bar;
        }
 
        location /bar {
            echo "a = [$a]";
        }
    }

여기  location /foo  통과되다  rewrite  명령 은 현재 요청 한 URI 를 무조건 변경 합 니 다.  /bar '내부 점프' 를 동시에 시작 하여 결국 뛰 어 들 었 다.  location /bar  맞다이곳 에서 비교적 재 미 있 는 곳 은 '내부 도약' 의 작업 원리 이다.'내부 도약' 은 본질 적 으로 현재 의 요청 처리 단 계 를 강제로 후퇴 시 키 는 것 이다.  find-config  단계, 요청 URI 와  location  블록의 짝 을 설정 합 니 다.예 를 들 어 상례 에서 운행 은  rewrite  단계 적  rewrite  명령 은 현재 요청 한 처리 단 계 를 되 돌 렸 다.  find-config  단계현재 요청 한 URI 가  rewrite  명령  /bar 그래서 이번에 바 꿨 어 요.  location /bar  현재 요청 과 연 결 된 다음 에 이어서  rewrite  단계 아래로 집행 하 다.
 
    하지만 여기 서 더 재 미 있 는 점 은 뒤로 물 러 서 는 것 이다.  find-config  단계 의 동작 은 결코 발생 한 것 이 아니다.  rewrite  단계  post-rewrite  단계상례 중의  rewrite  명령 은 Nginx 에 게 간단하게 지시 할 뿐 필요 합 니 다.  post-rewrite  단계 에서 '내부 도약' 을 시작 하 다.이 디자인 은 Nginx 초보 자 에 게 좀 이상 하 게 보일 수 있 습 니 다. '왜 직접 있 지 않 습 니까?  rewrite  "명령 을 실행 할 때 바로 점프 를 합 니까?" 답 은 간단 합 니 다. 그것 은 처음에 일치 하기 위해 서 입 니 다.  location  블록 에 URI 를 여러 번 반복 해서 쓰 는 것 을 지원 합 니 다. 예 를 들 어:
    location /foo {
        rewrite ^ /bar;
        rewrite ^ /baz;
 
        echo foo;
    }
 
    location /bar {
        echo bar;
    }
 
    location /baz {
        echo baz;
    }

여기  location /foo  현재 요청 한 URI 를 두 번 연속 으로 바 꿉 니 다. 첫 번 째 는 무조건 바 꿉 니 다.  /bar, 두 번 째 는 무조건  /baz. 이 두 개 는  rewrite  문 구 는 결국  post-rewrite  단계 에서 '내부 점프' 동작 이 발생 하여 URI 를 처음 고 칠 때 현재 의 것 에서 바로 떨 어 지지 않 습 니 다.  location  뒤에  rewrite  문 구 는 실행 할 기회 가 없다.요청 /foo 인터페이스의 결 과 는 이 점 을 증명 했다.
    $ curl localhost:8080/foo
    baz

출력 결 과 를 보면 상례 에서 확실히 성공 적 으로  /foo  한 발 짝 뛰 었 다.  /baz  맞다Nginx '디 버 깅 로그' 를 사용 하면  find-config  단계 생 성의  locatin  블록의 일치 정보 에서 이 점 을 더욱 증명 합 니 다.
    $ grep 'using config' logs/error.log
    [debug] 89449#0: *1 using configuration "/foo"
    [debug] 89449#0: *1 using configuration "/baz"

이번 요청 에 대해 Nginx 는 모두 일치 하 는 것 을 보 았 습 니 다.  /foo  화해시키다  /baz  이 두 개  location 그래서 '내부 점프' 가 한 번 밖 에 발생 하지 않 았 다.
 
    하면, 만약, 만약...  server  설정 블록 에서 직접 사용  rewrite  요청 URI 에 대한 변경 명령 을 설정 하면 '내부 전환' 과 관련 되 지 않 습 니 다. 이 때 URI 변경 이 발생 했 기 때 문 입 니 다.  server-rewrite  단계  location  짝 짓 기  find-config  단계예 를 들 어 다음 의 이 예 는:
    server {
        listen 8080;
 
        rewrite ^/foo /bar;
 
        location /foo {
            echo foo;
        }
 
        location /bar {
            echo bar;
        }
    }

여기  server-rewrite  단 계 는 그 걸 로...  /foo  시작 URI  /bar, 이때 요청 은 아무것도 하지 않 았 습 니 다 location 연결 되 어 있 기 때문에 Nginx 는 정상적으로 아래로 운행 합 니 다.  find-config  단계  location  일치 하 다.하면, 만약, 만약...  /foo  그러면  location /foo  일치 할 기회 가 전혀 없습니다. 첫 번 째 (유일한) 운행 find-config 때 문 입 니 다. 단계 시 현재 요청 한 URI 가 변경 되 었 습 니 다.  /bar 일치 만 합 니 다.  location /bar. 실제 요청 한 출력 은 다음 과 같 습 니 다.
    $ curl localhost:8080/foo
    bar

Nginx "디 버 깅 로그" 는 우리 의 결론 을 다시 한 번 입증 할 수 있 습 니 다.
    $ grep 'using config' logs/error.log
    [debug] 92693#0: *1 using configuration "/bar"

보 실 수 있 습 니 다. Nginx 는 총 한 번 밖 에 진행 되 지 않 았 습 니 다.  location  일치 합 니 다. '내부 점프' 가 발생 하지 않 았 습 니 다.

좋은 웹페이지 즐겨찾기