Nginx 의 위치 일치 원칙

5676 단어
Nginx 의 역방향 대리 와 부하 균형 을 배 운 후에 알 게 된 기본 적 인 원 리 는 실제 프로젝트 배치 에서 이런 것들 을 어떻게 유연 하 게 활용 하 는 지 알 아야 한다. 그 중에서 중요 한 것 은 Location 매 칭 원칙 이다.
0. 흔히 볼 수 있 는 정규 표현 식 기호
기호.
속뜻
$
입력 문자열 의 끝 위치 와 일치 합 니 다.
( )
하위 표현 식 의 시작 과 끝 위 치 를 표시 합 니 다.
*
앞의 하위 표현 식 과 한 번 또는 여러 번 일치 합 니 다.
^
입력 문자열 의 시작 위치 와 일치 합 니 다.
\
다음 문 자 를 특수 문자 나 원 의 문자 로 표시 하거나 뒤로 참조 하거나 8 진 전의 문자 로 표시 합 니 다.
|
두 가지 선택 을 가리키다
.
줄 바 꿈 자 를 제외 한 모든 문자 와 일치 합 니 다.
?
앞의 하위 표현 식 과 0 번 또는 한 번 일치 하거나 탐욕 이 아 닌 한정 자 를 가 리 킵 니 다.
~
정규 일치, 대소 문자 구분
이상 의 특수 문 자 를 일치 시 키 려 면 앞 에 전의 문자 \ 를 추가 하면 됩 니 다. * * 소괄호 () 사이 에 일치 하 는 내용 은 뒤에서 $1 를 통 해 인용 할 수 있 습 니 다. $2 는 앞의 두 번 째 () 의 내용 을 나타 내 고 정규 표현 식 은 나중에 $1 을 포함 할 수 있 습 니 다. $9변수 에서 중복 사용 되 는 캡 처 * *
1. 기본 문법
1. Nginx 위치 설정 문법
 1. location [ = | ~ | ~* | ^~ ] uri { ... }
 2. location @name { ... } 

2. location 설정 은 두 가지 설정 방법 이 있 습 니 다.
1.   + uri(   /     )
2.@ + name

3. 접두사 의 의미
패턴
속뜻
location = /uri
= 정확하게 일치 함 을 나타 내 며, 완전히 일치 해야만 유효 함
location ^~ /uri
^ ~ 처음 URL 경 로 를 접두사 로 일치 시 키 고 정규 전에.
location ~ pattern
첫머리 는 대소 문 자 를 구분 하 는 정규 일치 를 나타 낸다
location ~* pattern
대소 문 자 를 구분 하지 않 는 정규 일치
location /uri
수정자 가 없 으 면 접두사 가 일치 하지만 정규 가 일치 하면
location /
일반적인 일치, 다른 location 에 일치 하지 않 는 요청 은 switch 의 default 에 해당 합 니 다.
접두사 가 일치 할 때 Nginx 는 url 에 인 코딩 을 하지 않 기 때문에 요청 은 /static/20%/aa 이 고 규칙 ^~ /static/ /aa 에 일치 할 수 있 습 니 다. (빈 칸 주의)
여러 location 설정 의 경우 일치 하 는 순 서 는 다음 과 같 습 니 다.
  • 우선 정확하게 일치 =
  • 다음 접두사 일치 ^~
  • 그 다음은 파일 의 순서 에 따라 정규 일치
  • 그리고 아무런 수식 이 없 는 접두사 와 일치 합 니 다.
  • 마지막 으로 / 통용 매 칭
  • 매 칭 성공 시 매 칭 을 중단 하고 현재 매 칭 규칙 에 따라 요청 을 처리 합 니 다
  • 메모: 접두사 가 일치 합 니 다. 관 계 를 포함 할 때 최대 일치 원칙 에 따라 일치 합 니 다.예 를 들 어 접두사 일치: location / dir 01 과 location / dir 01 / dir 02, 요청 이 있 으 면http://localhost/dir01/dir02/file location / dir 01 / dir 02 에 최종 매 칭
    4. location 기초 지식
  • location 은 server 블록 에서 일치 합 니 다.
  • 서로 다른 URL 에 따라 서로 다른 설정 (location 에서 설정) 을 사용 하여 서로 다른 요청 을 처리 할 수 있 습 니 다.
  • location 은 순서 가 있 고 첫 번 째 로 일치 하 는 location 에 의 해 처 리 됩 니 다.

  • 2. location 실례
    1. 기본 일치 인 스 턴 스
    * * 보통 일치, 최 장 일치 규칙 에 따라 하나의 요청 이 두 개의 일반 규칙 에 일치 했다 고 가정 하면 길이 가 큰 것 을 선택 하 십시오 * *
    예 를 들 면:
      location /{
        [matches]
      }
      location /test{
        [matches]
      }
    

    * * 정확 한 일치 * *
      location = /{
        [matchtes]
      }
      location = /test{
        [matches]
      }
    

    * * 정규 일치 * *
    대소 문자 구분 일치
      location ~ ^*.php${
        [matches]
      }
    

    ~ * 대소 문자 의 일치 구분 없 음
      location ~* ^*.php${
        [matches]
      }
    

    ^ ~ 일반 문자 가 일치 합 니 다. 이 규칙 과 일치 하 기 를 요청 하면 다른 규칙 은 무시 하고 이 규칙 만 일치 합 니 다.
     location ^~ /test{
        [matches]
      }
    

    @ locationname 내부 리 디 렉 션 일치
    location @locationname{
        [matches]
      }
    

    일치 우선 순위: 우선 정확 한 일치 규칙 이 있 는 지 확인 하고 있 으 면 정확 한 일치 규칙 을 처리 합 니 다. 정확 한 일치 규칙 이 발견 되면 다른 일치 규칙 을 검색 하지 않 고 현재 일치 하 는 규칙 을 되 돌려 줍 니 다. 그 다음 에 일반 문자 가 일치 하 는 지 확인 하 십시오. 이 일치 요청 은 정규 또는 더 긴 일치 가 있 는 지 확인 해 야 합 니 다.정규 일치 또는 더 긴 일치 로 되 돌아 갑 니 다 ^ ~ 일치 하 는 것 은 세 번 째 단계 로 처 리 됩 니 다. 이 규칙 과 일치 하 기 를 요청 하면 다른 규칙 과 일치 하지 않 습 니 다. 이 규칙 을 되 돌려 주 는 것 은 마지막 으로 실 행 됩 니 다. 정규 일치 하 는 것 은 찾 으 면 다른 규칙 을 해석 하지 않 습 니 다. 이것 은 우선 순위 에 주의해 야 합 니 다.
    2. 완전한 예
    location  = / {
      #    "/".
      [ configuration A ] 
    }
    location  / {
      #       ,         "/"  
      #                       
      [ configuration B ] 
    }
    
    location ^~ /images/ {
      #       /images/      ,        location
      [ configuration C ] 
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
      #     gif, jpg, or jpeg     . 
      #      /images/         [Configuration C]  .   
      [ configuration D ] 
    }
      URI  :
    
    / ->   configuration A
    /documents/document.html ->   configuration B
    /images/1.gif ->   configuration C
    /documents/1.jpg ->   configuration D
    
    @location   
    error_page 404 = @fetch;
    
    location @fetch{
      proxy_pass http://fetch;
    }
    

    3. 실제 사용 규칙
    #       ,               ,  :
    #       ,              ,         ,     。
    #                ,          
    #        
    location = / {
        proxy_pass http://tomcat:8080/index
    }
    #                 ,  nginx  http      
    #        ,         ,         
    location ^~ /static/ {
        root /webroot/static/;
    }
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/;
    }
    #           ,                
    #               ,        
    #            , .php,.jsp        
    location / {
        proxy_pass http://tomcat:8080/
    }
    

    4. 위치의 루트 경로 규칙
    alias 가 지정 한 디 렉 터 리 는 정확 합 니 다. location 에 디 렉 터 리 를 지정 합 니 다.루트 는 디 렉 터 리 의 상위 디 렉 터 리 를 지정 하고 이 상위 디 렉 터 리 는 location 이 지정 한 이름 의 동명 디 렉 터 리 를 포함 해 야 합 니 다.
    location /img/ {
        alias /var/www/image/;
    }
    #         ,   /img/        ,ningx    /var/www/image/     
    #  :
    #1.   alias ,         "/"。
    #2. alias        ,                    。
    #3. alias    location  。(root     location )
    
    location /img/ {
        root /var/www/image;
    }
    #         ,   /img/       ,nginx  /var/www/image/img/      
    # root          ,nginx   root location   
    

    5. 참고 자료
    https://segmentfault.com/a/1190000009651161
    https://gist.github.com/luxixing/7262911
    http://nginx.org/en/docs/http/ngx_http_core_module.html#location
    https://segmentfault.com/a/1190000002797606

    좋은 웹페이지 즐겨찾기