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

9399 단어 nginx
뒤따르다  post-access  단계 다음  try-files  단계이 단 계 는 표준 설정 명령 을 실현 하 는 데 전문 적 으로 사용 된다.  try_files  의 기능 은 Nginx 모듈 등록 처리 프로그램 을 지원 하지 않 습 니 다.... 때문에  try_files  명령 은 많은 FastCGI 에서 사용 되 는 설정 에 사용 되 기 때문에 간단하게 소개 하 는 것 도 좋 습 니 다.
 
     try_files  명령 은 두 개 이상 의 임의의 매개 변 수 를 받 아들 이 고 매개 변 수 는 하나의 URI 를 지정 합 니 다. 여기 서 설정 을 가정 합 니 다.  N  매개 변 수 는 Nginx 에 있 습 니 다.  try-files  단계  N-1  파일 시스템 의 대상 (파일 이나 디 렉 터 리) 에 매개 변 수 를 매 핑 한 다음 이 대상 이 존재 하 는 지 확인 합 니 다.Nginx 에서 어떤 파일 시스템 대상 이 존재 하 는 것 을 발견 하면  try-files  단 계 는 현재 요청 한 URI 를 해당 대상 에 대응 하 는 인자 URI 로 변경 합 니 다 (단, 끝 에 있 는 슬 래 쉬 문 자 는 포함 되 지 않 으 며 '내부 점프' 는 발생 하지 않 습 니 다).하면, 만약, 만약...  N-1  매개 변수 에 대응 하 는 파일 시스템 대상 이 존재 하지 않 습 니 다. try-files 단 계 는 바로 '내부 점프' 를 마지막 매개 변수 (즉, 제) 로 시작 합 니 다.  N  매개 변수) 지정 한 URI.
 
    앞에서  (6)  화해시키다  (7)  정적 자원 서비스 모듈 이 현재 요청 한 URI 를 파일 시스템 에 비 추 는 것 을 보 았 습 니 다.  root 명령 이 지정 한 '문서 루트 디 렉 터 리' 를 설정 하여 매 핑 합 니 다.예 를 들 어 '문서 루트 디 렉 터 리' 는  /var/www/  동안 URI 요청 /foo/bar 파일 로 비 춰 집 니 다.  /var/www/foo/bar, URI 요청  /foo/baz/  디 렉 터 리 로 매 핑 됩 니 다.  /var/www/foo/baz/. URI 끝의 슬 래 쉬 문 자 를 통 해 '디 렉 터 리' 와 '파일' 을 구분 하 는 방법 에 주의 하 십시오.우 리 는 지금 토론 하고 있다.  try_files 설정 명령 은 같은 규칙 을 사용 하여 각 매개 변수 URI 가 파일 시스템 대상 에 대한 매 핑 을 완성 합 니 다.
 
    아래 의 이 예 를 살 펴 보 자.
    root /var/www/;
 
    location /test {
        try_files /foo /bar/ /baz;
        echo "uri: $uri";
    }
 
    location /foo {
        echo foo;
    }
 
    location /bar/ {
        echo bar;
    }
 
    location /baz {
        echo baz;
    }

여기 통과.  root  명령 은 '문서 루트 디 렉 터 리' 를  하면, 만약, 만약...  /var/www/  경로 아래 에 중요 한 데 이 터 를 저장 하면 다른 임의의 경로 로 바 꿀 수 있 지만, 이 경 로 는 Nginx worker 프로 세 스 를 실행 하 는 시스템 계 정 에 최소한 읽 을 수 있 는 권한 이 있 습 니 다.우 리 는 /var/www/ 사용중  try_files  명령 을 설정 하고 세 개의 인 자 를 제공 합 니 다. location /test, /foo 화해시키다  /bar/. 앞의 쌍 에 따라 try_files 지령 의 소 개 는 우리 가 알 수 있 듯 이, 그것 은  /baz  단계 순서대로 앞의 두 매개 변 수 를 검사 합 니 다.  try-files  화해시키다  /foo  대응 하 는 파일 시스템 대상 이 존재 하 는 지 여부 입 니 다.
 
    먼저 실험 조 를 만들어 도 무방 하 다.지금  /bar/  경로 아래 가 비어 있 으 면 첫 번 째 매개 변수 입 니 다.  /var/www/  매 핑 된 파일 /foo 존재 하지 않 는 다.마찬가지 로 두 번 째 매개 변수 에 대해  /var/www/foo  매 핑 된 디 렉 터 리  /bar/  없 는 거 야.그래서 지금 Nginx 가 있 습 니 다.  /var/www/bar/  마지막 인자 가 지정 한 URI (즉,  try-files 의 '내부 점프'.실제 요청 결 과 는 이 점 을 입증 했다.
    $ curl localhost:8080/test
    baz

분명히 이 요 구 는 최종 적 으로  /baz  연결 되 어 출력 을 실 행 했 습 니 다.  location /baz  문자열 작업.상례 에서 정의 한  baz  화해시키다  location /foo  이곳 의 운행 과정 에 전혀 참여 하지 않 을 것 입 니 다. 왜냐하면  try_files  이전  location /bar/  개 인자, Nginx 는 파일 시스템 만 검사 하고 URI 와  N-1  사이 의 일치.
 
    위의 요청 에 대해 Nginx 는 다음 과 같은 '디 버 깅 로그' 를 생 성 합 니 다.
    $ grep trying logs/error.log
    [debug] 3869#0: *1 trying to use file: "/foo" "/var/www/foo"
    [debug] 3869#0: *1 trying to use dir: "/bar" "/var/www/bar"
    [debug] 3869#0: *1 trying to use file: "/baz" "/var/www/baz"

이 정 보 를 통 해 똑똑히 볼 수 있다.  location  단계 에서 일어 난 일: Nginx 가 파일 을 차례로 검 사 했 습 니 다.  try-files  디 렉 터 리 /var/www/foo 와 마지막 매개 변 수 를 처리 하 였 습 니 다.  /var/www/bar. 여기 서 마지막 '디 버 깅 정보' 는 오해 하기 쉬 우 며 Nginx 도 마지막 인 자 를  /baz  매 핑 을 파일 시스템 대상 으로 검사 한 것 은 사실 이 아 닙 니 다.... 해 야 한다  try_files  명령 이 마지막 매개 변 수 를 처리 할 때 '내부 점프' 를 직접 실행 합 니 다. 해당 하 는 파일 시스템 대상 이 존재 하 든 안 하 든 간 에.
 
    다음 에 실험 을 하나 더 하 겠 습 니 다.  /baz  다음 이름 만 들 기  /var/www/  파일  foo (주의 할 필요 가 있 습 니 다 hello world 디 렉 터 리 에 쓰기 권한):
    $ echo 'hello world' > /var/www/foo

그리고 부탁 해.  /var/www/  인터페이스:
    $ curl localhost:8080/test
    uri: /foo

여기 서 무슨 일이 일 어 났 습 니까?우리 가 보기에 try_files 명령 의 첫 번 째 매개 변수  /test  파일 로 매 핑 가능  /foo, Nginx 는 /var/www/foo 단계 에서 이 파일 이 확실히 존재 한 다 는 것 을 알 게 되 었 습 니 다. 그래서 현재 요청 한 URI 를 이 인자 의 값 으로 바 꿉 니 다. 즉,  try-files 그리고 뒤의 인 자 를 계속 검사 하지 않 고 뒤의 요청 처리 단 계 를 직접 실행 합 니 다.
 
    위 에서 이 부탁 은  /foo  단계 에서 발생 하 는 "디 버 깅 로그" 는 다음 과 같 습 니 다.
    $ grep trying logs/error.log
    [debug] 4132#0: *1 trying to use file: "/foo" "/var/www/foo"

분명히  try-files  단계, Nginx 는 확실히 검사 와 처리 만 했 습 니 다.  try-files  이 매개 변 수 는 뒤의 매개 변 수 는 모두 단락 되 었 다.
 
    유사 하 게 우리 가 방금 만 든 것 을 삭제 했다 고 가정 합 니 다.  /foo  서류  /var/www/foo  다음 이름 만 들 기  /var/www/  하위 디 렉 터 리:
    $ mkdir /var/www/bar

요구 하 다  bar  결과 도 비슷 하 다.
    $ curl localhost:8080/test
    uri: /bar

이런 상황 에서 Nginx 는  /test  단계 첫 번 째 인자 발견  try-files  대응 하 는 파일 이 존재 하지 않 으 면 두 번 째 매개 변수 에 대응 하 는 파일 시스템 대상 을 검사 합 니 다. (여기 가 디 렉 터 리 입 니 다.  /foo )。이 디 렉 터 리 가 존재 하기 때문에 Nginx 는 현재 요청 한 URI 를 두 번 째 인자 의 값 으로 바 꿉 니 다. 즉,  /var/www/bar/ (주의, 원시 매개 변수 값 은?  /bar, 하지만  try_files  끝 에 있 는 슬 래 쉬 문 자 를 자동 으로 제거 합 니 다.
 
    이 실험 에서 발생 한 "디 버 깅 로그" 는 다음 과 같다.
    $ grep trying logs/error.log
    [debug] 4223#0: *1 trying to use file: "/foo" "/var/www/foo"
    [debug] 4223#0: *1 trying to use dir: "/bar" "/var/www/bar"

우 리 는 보 았 다. try_files 명령 은 여기에서 두 개의 인자 만 검사 하고 처리 했다.
 
    앞의 이 몇 조 의 실험 을 통 해 보기 어렵 지 않다. try_files 명령 은 본질 적 으로 현재 요청 한 URI 를 조건 부 로 바 꿀 뿐 이 며, 여기 서 말 하 는 '조건' 은 파일 시스템 의 대상 이 존재 하 는 지 여부 입 니 다.'조건' 이 모두 만족 하지 않 을 때, 그것 은 무조건 지 정 된 '내부 점프' 를 시작 할 것 이다.물론 무조건 '내부 도약' 을 시작 하 는 것 외 에 try_files 명령 은 다음 과 같이 지 정 된 상태 코드 의 HTTP 오류 페이지 를 직접 되 돌려 줍 니 다.
    try_files /foo /bar/ =404;

이 줄 설정 은  /bar/  화해시키다  /foo  매개 변수 에 대응 하 는 파일 시스템 대상 이 존재 하지 않 을 때 바로 되 돌려 줍 니 다.  /bar/  오류 페이지.HTTP 상태 코드 를 표시 하기 위해 등호 문자 접 두 사 를 어떻게 사용 하 는 지 주의 하 십시오.

좋은 웹페이지 즐겨찾기