nginx 설정 중 location 일치 규칙 상세 설명

nginx 설정 중 location 일치 규칙 상세 설명
개술
nginx 공식 문 서 는 location 문법 을 다음 과 같이 보 여 줍 니 다.
1 location [=|~|~*|^~] uri { … }
그 중에서 도 괄호 안에 있 는 네 가지 식별 자 는 옵션 으로 요청 문자열 과 uri 의 일치 방식 을 바 꿀 수 있 습 니 다.uri 는 일치 하 는 요청 문자열 입 니 다. 정규 문자열 을 포함 하지 않 을 수도 있 습 니 다. 이 모델 은 '표준 uri' 라 고도 부 르 고 정규 도 포함 할 수 있 습 니 다. 이 모델 은 '정규 uri' 라 고도 부 릅 니 다. 다음 과 같 습 니 다.
1 2 location ~ .*\.(php|php5)?$ { }
두, 네 가지 선택 가능 한 식별 자
식별 자
묘사 하 다.
=
정확하게 일치 합 니 다. 표준 uri 에 사용 하기 전에 요청 문자열 이 uri 와 엄 격 히 일치 하도록 요구 합 니 다. 일치 하 는 데 성공 하면 일치 하지 않 고 이 location 의 요청 을 즉시 실행 합 니 다.
~
정규 가 일치 합 니 다. 정규 uri 앞 에 사용 하면 uri 에 정규 가 포함 되 어 있 고 대소 문 자 를 구분 합 니 다.
~*
정규 가 일치 합 니 다. 정규 uri 앞 에 사용 하면 uri 에 정규 가 포함 되 어 있 고 대소 문 자 를 구분 하지 않 습 니 다.
^~
정규 일치 하지 않 습 니 다. 표준 uri 전에 nginx 서버 가 접두사 가 가장 많은 uri 와 일치 하면 끝 납 니 다. 이 모드 가 일치 하면 정규 일치 하지 않 습 니 다.
없다
보통 일치 (최 장 문자 일치), location 순서 와 상 관 없 이 일치 하 는 길이 에 따라 일치 하 는 결 과 를 가 져 옵 니 다. 완전히 일치 하면 일치 하지 않 습 니 다.
비고:
1. uri 에 정규 표현 식 이 포함 되 어 있 으 면 ~ 또는 ~ * 식별 자 를 사용 해 야 합 니 다.
2. ~ * 와 일치 하 는 식별 자 를 앞 에 붙 일 수 있 습 니 다! 반대로 가 져 올 수 있 습 니 다. 다음 과 같 습 니 다.
! ~ 정규 가 일치 하지 않 음 을 나타 내 고 대소 문 자 를 구분 합 니 다.
! ~ * 는 정규 가 일치 하지 않 고 대소 문 자 를 구분 하지 않 음 을 나타 낸다.
2.1 "=" 정확 한 일치 사례
1 2 3 location  = /login {    #   /login , , }
2.2 "~" 대소 문자 구분 정규 일치 사례
1 2 3 location ~ /images/ {    # , , , }
2.3 "~ *" 대소 문자 정규 일치 사례 구분 없 음
 
1 2 3 location ~* /images/ {    # , , , }
2.4 "^ ~" 정규 일치 하 는 표준 일치 하지 않 음
1 2 3 location ^~ /images/ {    #   /images/  , , , 。 }
 
2.5 일반 일치 (최 장 문자 일치)
1 2 3 4 location  /blog/ {    #  location    #  , , }
3. 위치 매 칭 순서
식별 자가 없 는 요청 에서 일치 하 는 규칙 은 다음 과 같 습 니 다.
1. nginx 서버 는 먼저 server 블록 의 여러 location 블록 에서 표준 uri 와 요청 문자열 이 일치 하 는 지 검색 합 니 다. 여러 표준 uri 가 일치 할 수 있다 면 그 중에서 일치 도가 가장 높 은 location 과 일치 합 니 다.
2. 그리고 nginx 는 location 블록 에서 정규 uri 와 요청 문자열 을 사용 하여 일치 합 니 다. 정규 일치 가 성공 하면 일치 하 는 것 을 끝내 고 이 location 처리 요청 을 사용 합 니 다. 정규 일치 가 실패 하면 표준 uri 에서 일치 도가 가장 높 은 location 을 사용 합 니 다.
비고:
1. 정확 한 일치 가 있 으 면 먼저 정확 한 일치, 일치 성공, 즉시 결 과 를 되 돌려 줍 니 다.
2. 일반적인 매 칭 은 순서 와 무관 합 니 다. 일치 하 는 길이 에 따라 일치 하 는 결 과 를 얻 기 때 문 입 니 다.
3. 정규 매 칭 은 순서 와 관련 이 있 습 니 다. 위 에서 아래로 일치 하기 때 문 입 니 다. (먼저 일치 하면 분석 과정 을 끝 냅 니 다)
4. location 에서 통 일 된 location 이 있 습 니 다. 모든 요청 이 일치 할 수 있 습 니 다. 다음 과 같 습 니 다.
1 2 3 4 location  / {    #   /  ,    }
식별 자 를 결합 하여 일치 하 는 순 서 는 다음 과 같 습 니 다.
(location =) > (location 전체 경로) > (location ^ ~ 경로) > (location ~, ~ * 정규 순서) > (location 부분 시작 경로) > (location /)
즉시
(정확하게 일치) > (최 장 문자열 은 일치 하지만 완전히 일치) > (비정규 일치) > (정규 일치) > (최 장 문자열 은 일치 하지 않 고 완전히 일치 하지 않 음) > (location 통 합)
사례
가령, 현재 다음 과 같은 몇 가지 규칙 이 있다 면:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 location = / {       // / ,      echo   " A" ; }   location = /login {    //  /login  , ,        echo   " B" ; }   location ^~ /blog/ {     // , /blog/ , ,    echo   " C" ; }     location ~  \.(gif|jpg|png|js|css)$ {      //    , ,      echo   " D" ; }     location ~* \.png$ {       //  , ,      echo   " E" ; }   location / {    //  /  ,    // ,      echo   " F" ; }   location /blog/detail {     // , , ,    echo   " G" ; }   location /images {        // ,        echo   " Y" ; }   location ^~ / static /files {        // , ,      echo   " X" ; }
1. 루트 경로 / 에 접근 할 때, 예 를 들 어http://www.findme.wang/ ,규칙 A 가 일치 합 니 다.
2. 당 방 여http://www.findme.wang/login ,규칙 B 가 일치 합 니 다.
3. 방문 할 때http://www.findme.wang/login.html ,규칙 F 가 일치 합 니 다.
4. 방문 할 때http://www.findme.wang/blog/detail/3.html ,규칙 C 와 일치 합 니 다. 사 고 를 분석 할 때 먼저 '정확 한 일치' 가 일치 할 수 있 는 지, 표시 가 안 되 는 지, 그리고 '일반 일치' 가 완전히 일치 할 수 있 는 지, 표시 도 되 지 않 는 지, 이 어 비정규 일치, 일치 할 수 있 는 지, 규칙 C 와 일치 하 는 지 를 살 펴 보 았 습 니 다. 그래서 규칙 C 를 사 용 했 습 니 다.

좋은 웹페이지 즐겨찾기