Nginx 의 location 다양한 일치 규칙 및 우선 순위 설명

9496 단어 Nginx
웹 서버 로 서 서로 다른 url 에 따라 서로 다른 처 리 를 할 수 있 는 것 은 nginx 의 주요 기능 이 라 고 할 수 있 습 니 다. 이러한 경로 선택 은 설정 파일 의 location 을 통 해 이 루어 집 니 다.이 절 에 우 리 는 location 가 어떻게 일 하 는 지 보 자.
저 는 T 형 소부 입 니 다. 평생 공부 하 는 인터넷 종사자 입 니 다.제 블 로 그 를 좋아 하 시 면 csdn 에서 저 를 주목 해 주 십시오. 문제 가 있 으 면 아래 댓 글 에서 교 류 를 환영 합 니 다. 감사합니다.
글 목록
  • 기본 형식
  • 두 가지 일치 방식
  • 접두사 문자
  • 정규 표현 식
  • 우선 순위 매 칭
  • 실제 조작 검증
  • url 결말 에 관 한 /
  • 총화

  • 기본 서식
    우선 기본 설정 이 어떤 지 살 펴 보 겠 습 니 다.
        server {
         
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
         
            }
    
            error_page 404 /404.html;
                location = /40x.html {
         
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
         
            }
        }
    

    location 필드 는 server 필드 에 있 습 니 다. 이 server 에서 경로 역할 을 합 니 다. 문법 규칙 은 다음 과 같 습 니 다.
    location [ = | ~ | ~* | ^~ ] url {
          ... }
    

    location 키워드 뒤에 선택 할 수 있 는 수식 자 를 연결 하고 뒤에 일치 하 는 조건 을 연결 하 며 마지막 으로 큰 괄호 안에 실행 할 동작 을 넣 습 니 다.
    하나의 server 필드 에 여러 개의 location 필드 가 있 을 수 있 습 니 다. 들 어 오 라 고 요청 하면 nginx 는 일정한 우선 순위 에 따라 이 location 을 일치 시 키 고 마지막 으로 가장 좋 은 동작 으로 실 행 됩 니 다.
    동작 을 특별히 가리 키 지 않 으 면 요청 한 경 로 를 루트 설정 뒤에 추가 하고 해당 하 는 정적 자원 을 되 돌려 줍 니 다.
    두 가지 일치 방식
    위의 기본 문법 중의 url 은 두 가지 문법 이 있 는데 하 나 는 접두사 문자 (prefix string) 이 고 다른 하 나 는 정규 표현 식 (regular expression) 이다.
    접두사 문자
    요청 한 url 의 경로 부분, 즉 ip 과 포트 뒤에 시 작 된 부분 입 니 다. location 에서 정 의 된 접두사 로 시작 하면 일치 하 는 것 으로 생각 합 니 다.
    url 구조 가 잘 모 르 는 친 구 는 나의 이 블 로그 의 'url 구성' 단락 을 참조 할 수 있다.
    예 를 들 어 다음 설정 이 있 습 니 다.
    location /some/path/ {
         
        #...
    }
    

    그러면 요청 한 경로 가 /some/path/xiaofu.mp3 일 때 일치 합 니 다. 그러나 요청 한 경로 가 /some/other/path/xiaofu.mp3 이면 일치 하지 않 습 니 다.
    정규 표현 식~ 로 대소 문 자 를 구분 하 는 정규 표현 식 을 표시 하고 ~* 으로 대소 문 자 를 구분 하지 않 는 정규 표현 식 을 표시 합 니 다.
    아래 설정 은 요청 한 url 의 임의의 위치 포함 .html 또는 .htm 이 일치 하 는 것 을 표시 합 니 다.
    location ~ \.html? {
         
        #...
    }
    

    일치 우선 순위
    위 에는 모두 네 가지 수식 부호 가 있 는데, 우 리 는 ~~* 가 정규 표현 식 에 쓰 이 는 것 이 고, 또 두 개 는 무엇 을 하 는 것 인지 알 게 되 었 다.
    이것 은 일치 하 는 우선 순위 와 관련된다.= 는 정확 한 매 칭 을 나타 낸다. ^~ 는 가장 좋 은 매 칭 을 나타 낸다. 둘 다 접두사 문자 매 칭 규칙 에 대응 하고 아래 의 매 칭 순 서 를 보면 둘 이 무엇 을 사용 하 는 지 알 수 있다.
  • 우선 모든 접두사 문자 규칙 을 일치 시 키 려 고 시도 하고 가장 긴 겹 침 을 최 적 으로 일치 시 킵 니 다
  • 만약 에 = 에 대응 하 는 정확 한 일치 만족 이 있다 면 요청 한 경로 와 일치 규칙 이 똑 같 으 면 정확 한 일치 행위 로 나머지 어떠한 일치 도 계속 하지 않 는 다
  • .
  • 있 으 면 가장 긴 겹 치 는 접두사 문 자 를 저장 합 니 다.가장 긴 겹 치 는 접두사 문자 가 ^~ 장식 문자 와 일치 하면 정규 일치 규칙 을 찾 지 않 고 가장 긴 접두사 에 맞 는 행동
  • 차례대로 정규 매 칭 을 하고 첫 번 째 매 칭 을 최 우선 으로 한다.정규 일치 하 는 우선 순위 가 접두사 문자 보다 높 습 니 다. 이 정규 일치 하 는 행동 을 직접 사용 합 니 다
  • 조건 을 만족 시 키 지 않 는 정규 일치 가 없 으 면 앞 에 저 장 된 최 장 접 두 사 를 사용 하여 일치 하 는 행동
  • 접두사 기호 와 정규 가 일치 하지 않 으 면 404
  • 로 돌아 갑 니 다.
    이상 의 일치 순 서 를 바탕 으로 아래 의 실제 조작 제안 이 있 을 수 있 습 니 다.
  • 자주 방문 하 는 경 로 를 = 로 정확하게 매 칭 하면 매 칭 시간 을 대량으로 절약 할 수 있다
  • .
  • 정규 매 칭 은 이동 후 첫 번 째 를 기준 으로 하기 때문에 정규 매 칭 의 앞 뒤 순서 가 중요 하 다. 보통 섬세 할 수록 앞
  • 실제 조작 검증
    이렇게 많아
    설정 수정 은 다음 과 같 습 니 다.
    location = / {
         
        return 601;
    }       
                
    location / {
         
        return 602;
    }
    
    location /user/ {
         
        return 603;
    }
    
    location ^~ /images/ {
         
        return 604;
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
         
        return 605;
    }
    

    여기 서 나 는 실제 자원 반환 을 준비 하지 않 고 5 개의 서로 다른 반환 코드 로 일치 하 는 결 과 를 구분 했다.
    문법 정확성 을 시험 해 보다.
    (base) [root@ai-therm ~]# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    그리고 설정 을 다시 불 러 옵 니 다.
    (base) [root@ai-therm ~]# systemctl reload nginx
    

    다른 기계 에서 curl 테스트 를 진행 하 다.
    직접 방문 / 하면 정확 한 일치 로 더 이상 아래로 내 려 가지 않 고 601 로 돌아 갑 니 다.
    root@control-plane-1:~# curl -I 172.29.56.178/
    HTTP/1.1 601 
    Server: nginx/1.16.1
    Date: Sat, 30 May 2020 16:20:55 GMT
    Content-Length: 0
    Connection: keep-alive
    

    접근 /user/xiaofu.mp3 하면 정규 일치 가 없 기 때문에 최 장 접두사 로 603 을 되 돌려 줍 니 다.
    root@control-plane-1:~# curl -I 172.29.56.178/user/xiaofu.mp3
    HTTP/1.1 603 
    Server: nginx/1.16.1
    Date: Sat, 30 May 2020 16:26:34 GMT
    Content-Length: 0
    Connection: keep-alive
    

    방문 /user/xiaofu.jpg 하면 정규 일치 우선 순위 가 높 아 605 로 돌아 갑 니 다.
    root@control-plane-1:~# curl -I 172.29.56.178/user/xiaofu.jpg
    HTTP/1.1 605 
    Server: nginx/1.16.1
    Date: Sat, 30 May 2020 16:26:38 GMT
    Content-Length: 0
    Connection: keep-alive
    

    접근 /images/xiaofu.jpg 하면 최 적 일치 로 정규 일치 규칙 을 무시 하고 604 로 돌아 갑 니 다.
    root@control-plane-1:~# curl -I 172.29.56.178/images/xiaofu.jpg
    HTTP/1.1 604 
    Server: nginx/1.16.1
    Date: Sat, 30 May 2020 16:29:06 GMT
    Content-Length: 0
    Connection: keep-alive
    

    마지막 으로 방문 /test/xiaofu.html 하면 다른 일치 가 없어 서 / 일치 만 602 로 돌아 갈 수 있 습 니 다.
    root@control-plane-1:~# curl -I 172.29.56.178/test/xiaofu.html
    HTTP/1.1 602 
    Server: nginx/1.16.1
    Date: Sat, 30 May 2020 16:33:55 GMT
    Content-Length: 0
    Connection: keep-alive
    

    url 끝 에 대한 /
  • location 의 일치 규칙 이 라면 뒤에 추가 여부 / 는 아무런 영향 이 없습니다
  • 요청 한 url 경로 의 루트 디 렉 터 리 라면 http://1.2.3.4http://1.2.3.4/ 는 다 르 지 않 습 니 다. 브 라 우 저 는 기본적으로 이것 /
  • 을 추가 해 주기 때 문 입 니 다.
  • 비 루트 디 렉 터 리 의 / 영향 이 비교적 크다.예 를 들 어 http://1.2.3.4/some/path//some/path/ 디 렉 터 리 에서 기본 파일 을 찾 아 되 돌려 주 고 http://1.2.3.4/some/path/some/ 디 렉 터 리 에서 path 라 는 파일 을 되 돌려 주 며, 찾 지 못 하면 끝 에 / 를 더 해 방향 을 바 꾸 어 계속 찾 습 니 다 /some/path/ 디 렉 터 리 에 있 는 기본 파일
  • 총결산
  • 접두사 문자열 을 먼저 일치 시 킨 다음 정규 일치 시 킵 니 다.하지만 정규 매 칭 우선 순위 가 높 습 니 다.
  • 접두사 문자열 은 최 장 일치 에 따라 최 적 화 된 매 칭 을 선택 하고 정 규 는 선착순 으로 최 적 화 된 매 칭 을 선택 합 니 다.따라서 정규 매 칭 규칙 은 우선 순위 에 주의해 야 한다. 정교 할 수록 앞
  • 잦 은 방문 url 에 대해 정확 한 일치 = 를 사용 하여 되 돌아 오 는 속 도 를 가속 화 합 니 다
  • 좋은 웹페이지 즐겨찾기