Nginx 의 location 일치

5179 단어
팀 이 전후 단 분 리 를 진행 하기 때문에 전단 이 Nginx 와 node 층 을 인수 하여 일상적인 업무 에서 Nginx 와 접촉 할 때 가 매우 많다.그 중에서 location 은 가장 많이 사용 되 고 변경 되 는 곳 입 니 다.이전에 location 에 대한 일치 규칙 은 수박 겉 핥 기 였 다.location 가 어떻게 일치 하 는 지 알 기 위해 서 특별히 시간 을 들 여 자 료 를 찾 아 이 글 을 정리 했다.도움 이 됐 으 면 좋 겠 습 니 다.
문법 규칙
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }


문법 규칙 은 매우 간단 합 니 다. 하나의 location 키 워드 는 뒤에 선택 할 수 있 는 수정자 가 있 고 그 다음은 일치 하 는 문자 이 며 괄호 에서 실행 할 동작 입 니 다.
수식 부호
  • = 는 정확 한 매 칭 을 나타 낸다.요청 한 url 경로 가 뒤의 문자열 과 완전히 같 을 때 만 명중 합 니 다.
  • ~ 이 규칙 은 정규 정 의 를 사용 하여 대소 문 자 를 구분 하 는 것 임 을 나타 낸다.
  • ~* 은 이 규칙 이 정규 정 의 를 사용 하고 대소 문 자 를 구분 하지 않 는 다 는 것 을 나타 낸다.
  • ^~ 이 기호 뒤의 문자 가 가장 잘 일치 하면 이 규칙 을 사용 하여 후속 검색 을 하지 않 겠 다 고 밝 혔 다.

  • 정합 과정
    요청 한 url 직렬 화.예 를 들 어 %xx 등 문 자 를 디 코딩 하고 url 에 연 결 된 여러 개 / 를 제거 하 며 url 에 있 는 ., .. 등 을 분석 합 니 다.이 단 계 는 일치 하 는 사전 작업 입 니 다.
    location 은 두 가지 표현 형식 이 있 는데 하 나 는 접두사 문 자 를 사용 하 는 것 이 고 하 나 는 정규 를 사용 하 는 것 이다.정규 라면 앞 에 ~ 또는 ~* 수정자 가 있다.
    구체 적 인 일치 과정 은 다음 과 같다.
    우선 접두사 문 자 를 사용 하여 정 의 된 location 를 확인 하고 가장 긴 일치 하 는 항목 을 선택 하여 기록 합 니 다.
    정확하게 일치 하 는 location 을 찾 았 다 면 = 수정자 의 location 을 사용 하여 검색 을 마치 고 설정 을 사용 하 는 것 입 니 다.
    그리고 정규 정 의 를 사용 하 는 location 을 순서대로 찾 습 니 다. 일치 하면 찾기 를 중단 하고 정 의 된 설정 을 사용 합 니 다.
    일치 하 는 정규 location 이 없 으 면 앞 에 기 록 된 최 장 일치 접두사 문자 location 을 사용 합 니 다.
    이상 의 일치 과정 을 바탕 으로 우 리 는 다음 과 같은 두 가지 시사 점 을 얻 을 수 있다.
  • 정규 정 의 된 location 을 사용 하여 설정 파일 에 나타 나 는 순서 가 중요 합 니 다.첫 번 째 일치 하 는 정규 를 찾 으 면 찾기 가 중단 되 고, 뒤에 정 의 된 정규 는 다시 일치 해도 기회 가 없 기 때문이다.
  • 정확 한 매 칭 을 사용 하면 검색 속 도 를 높 일 수 있다.예 를 들 어 자주 요청 / 하면 = 을 사용 하여 location 을 정의 할 수 있 습 니 다.

  • 예시
    다음은 일치 하 는 과정 을 하나의 예 로 구체 적 으로 설명 하 겠 습 니 다.
    다음 설정 파일 이 있다 면:
    location = / {
        [ configuration A ]
    }
    
    location / {
        [ configuration B ]
    }
    
    location /user/ {
        [ configuration C ]
    }
    
    location ^~ /images/ {
        [ configuration D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
        [ configuration E ]
    }
    
    

    요청 / A 와 정확하게 일치 하여 더 이상 찾 지 않 습 니 다.
    B 와 일치 하도록 요청 /index.html 합 니 다.먼저 일치 하 는 접두사 문 자 를 찾 습 니 다. 가장 긴 일치 하 는 것 은 설정 B 를 찾 은 다음 순서대로 일치 하 는 정규 를 찾 습 니 다.결 과 를 찾 지 못 했 습 니 다. 따라서 이전에 표 시 된 최 장 일치, 즉 설정 B 를 사용 합 니 다.
    C 와 일치 하도록 요청 /user/index.html 합 니 다.먼저 최 장 일치 C 를 찾 습 니 다. 뒤에 일치 하 는 정규 가 없 기 때문에 최 장 일치 C 를 사용 합 니 다.
    E 와 일치 하도록 요청 /user/1.jpg 합 니 다.먼저 접두사 문 자 를 찾 고 최 장 일치 하 는 항목 C 를 찾 으 며 정규 검색 을 계속 하여 일치 하 는 항목 E 를 찾 습 니 다.그래서 E 를 사용한다.
    D 와 일치 하도록 요청 /images/1.jpg 합 니 다.우선 접두사 문 자 를 찾 아 최 장 일치 D 를 찾 습 니 다.그러나 특이 한 것 은 ^~ 수식 자 를 사용 하여 다음 정규 일치 검색 을 하지 않 기 때문에 D 를 사용 합 니 다.여기 앞 에 있 는 수정자 가 없 으 면 최종 매 칭 은 E 입 니 다.왜 그런 지 생각해 보 세 요.
    B 와 일치 하도록 요청 /documents/about.html 합 니 다.B 는 / 로 시작 하 는 모든 URL 이 일치 하 다 는 것 을 표시 하기 때문이다.위의 설정 에 서 는 B 만 만족 할 수 있 기 때문에 B 와 일치 합 니 다.
    location @ name 의 용법
    @ 이름 location 을 정의 하 는 데 사용 합 니 다.내부 방향 을 바 꾸 는 데 주로 사용 되 며 정상 적 인 요청 을 처리 할 수 없습니다.그 용법 은 다음 과 같다.
    location / {
        try_files $uri $uri/ @custom
    }
    location @custom {
        # ...do something
    }
    

    이전 예 에서 url 에 접근 하려 고 시도 할 때 해당 하 는 파일 을 찾 지 못 하면 사용자 정의 이름 location (여 기 는 custom) 으로 바 꿉 니 다.
    주의해 야 할 것 은 이름 location 에 다른 이름 location 을 더 이상 끼 워 넣 을 수 없다 는 것 이다.
    URL 끝의 / 필요 하 십 니까?
    URL 끝의 / 에 대해 서도 세 가지 설명 이 필요 합 니 다.첫 번 째 는 location 설정 과 관련 이 있 고 다른 두 가 지 는 무관 합 니 다.
  • location 의 문자 유 무 / 는 영향 을 주지 않 습 니 다.즉 /user//user 는 같다.
  • URL 구조 가 https://domain.com/ 형식 이 라면 꼬리 부분 에 있 는 지 없 는 지 / 는 방향 을 바 꾸 지 않 습 니 다.브 라 우 저가 요청 을 할 때 기본적으로 추가 되 었 기 때문이다 /.많은 브 라 우 저 들 이 주소 표시 줄 에 도 표시 되 지 않 지만 /.이 점 은 baidu 를 방문 하여 검증 할 수 있 습 니 다.
  • URL 의 구조 가 https://domain.com/some-dir/ 이면.꼬리 부분 이 부족 하면 / 방향 을 바 꿀 수 있다.약정 에 따라 URL 끝의 / 는 디 렉 터 리 를 표시 하고 / 는 파일 을 표시 하지 않 기 때문이다.따라서 접근 /some-dir/ 할 때 서버 는 자동 으로 이 디 렉 터 리 에서 해당 하 는 기본 파일 을 찾 습 니 다.접근 /some-dir 하면 서버 에서 먼저 some-dir 파일 을 찾 습 니 다. 찾 지 못 하면 some-dir 을 디 렉 터 리 로 삼 아 /some-dir/ 로 바 꾸 고 이 디 렉 터 리 에서 기본 파일 을 찾 습 니 다.당신 의 사이트 가 이 렇 는 지 시험 해 볼 수 있 습 니 다.

  • 총결산
    location 의 설정 은 두 가지 형식 으로 접두사 문자 와 정규 가 있 습 니 다.일치 하 는 것 을 찾 을 때 접두사 문 자 를 찾 고 가장 긴 일치 하 는 항목 을 선택 한 다음 정규 를 찾 습 니 다.정규 우선 순위 가 접두사 문자 보다 높 습 니 다.
    정규 등 찾기 는 설정 파일 의 순서에 따라 진행 된다.따라서 정규 등의 순서 가 중요 하 므 로 정교 하 게 놓 을 수록 앞 에 놓 는 것 을 권장 한다.
    사용 = 정확 한 일치 로 검색 순 서 를 빠르게 할 수 있 습 니 다. 루트 도 메 인 이름 이 자주 방문 된다 면 사용 하 는 것 을 권장 합 니 다 =.
    다음으로 전송:https://juejin.im/post/5cbe89b6f265da0373718707

    좋은 웹페이지 즐겨찾기