웹사이트 검색

Nginx 위치 지시문 예제


NGINX 서버 블록 내의 위치 지시문을 사용하면 요청을 파일 시스템 내의 올바른 위치로 라우팅할 수 있습니다. 이 지시문은 위치 블록을 URL과 일치시키는 동안 파일 및 폴더를 포함하여 리소스를 찾을 위치를 NGINX에 알리는 데 사용됩니다. 이 튜토리얼에서는 NGINX 위치 지시어에 대해 자세히 살펴보겠습니다.

전제 조건

  • 여기에서 튜토리얼을 따라 이미 NGINX를 설치했습니다.

NGINX 위치 지시문 구문

NGINX 위치 블록은 서버 블록 내부 또는 일부 제한 사항이 있는 다른 위치 블록 내부에 배치할 수 있습니다. 위치 블록을 구성하는 구문은 다음과 같습니다.

location [modifier] [URI] {
  ...
  ...
}

위치 블록의 수정자는 선택 사항입니다. 위치 블록에 수정자가 있으면 NGINX가 URL을 다르게 처리할 수 있습니다. 가장 일반적인 수식어는 다음과 같습니다.

  • 없음: 위치 블록에 수정자가 없으면 요청된 URI가 요청된 URI의 시작 부분과 일치합니다.
  • =: 등호는 위치 블록을 요청된 URI와 정확히 일치시키는 데 사용됩니다.
  • ~: 물결 기호는 요청된 URI에 대한 대소문자 구분 정규식 일치에 사용됩니다.
  • ~*: 물결표 뒤에 별표 기호는 요청된 URI에 대한 대소문자를 구분하지 않는 정규식 일치에 사용됩니다.
  • ^~: 캐럿 뒤에 물결표 기호가 있으면 요청된 URI에 대해 가장 긴 비정규 표현식 일치를 수행하는 데 사용됩니다. 요청된 URI가 이러한 위치 블록에 도달하면 더 이상 일치하지 않습니다.

NGINX가 위치 블록을 선택하는 방법

접두사 문자열을 사용하거나 정규식을 사용하여 위치를 정의할 수 있습니다. 대소문자를 구분하지 않는 정규식은 앞에 "~*\ 한정자를 사용하여 지정하고 대소문자를 구분하지 않는 정규식의 경우 "~\ 한정자를 사용합니다. URI에 대한 위치 일치를 찾기 위해 NGINX는 먼저 접두사 문자열(정규 표현식 없이)을 사용하여 정의된 위치를 스캔합니다. 그런 다음 구성 파일에서 선언된 순서대로 정규식이 있는 위치를 확인합니다. NGINX는 요청된 URI에 대해 위치 블록을 선택하기 위해 다음 단계를 통해 실행됩니다.

  • NGINX는 location = /some/path/로 지정된 정확한 일치 항목을 찾는 것으로 시작하며 일치 항목이 발견되면 이 블록이 즉시 제공됩니다.
  • 정확한 위치 블록이 없으면 NGINX는 일치하는 가장 긴 정확하지 않은 접두사를 진행하고 ^~ 수정자가 사용된 일치 항목이 발견되면 NGINX는 더 이상 검색을 중지하고 이 위치 블록을 선택하여 요청을 처리합니다. .
  • 일치하는 가장 긴 접두사 위치에 ^~ 수식어가 없으면 일치 항목이 임시로 저장되고 다음 단계를 진행합니다.\n
    • NGINX는 이제 ~ 및 ~* 수식어가 포함된 위치 블록으로 검색을 이동하고 요청 URI와 일치하는 첫 번째 위치 블록을 선택하고 요청을 처리하도록 즉시 선택됩니다.
    • 위 단계에서 요청된 URI와 일치할 수 있는 위치를 찾을 수 없으면 이전에 저장된 접두사 위치가 요청을 처리하는 데 사용됩니다.

    NGINX 위치 블록 예시

    수정자와 URI를 사용하는 NGINX 위치 블록의 몇 가지 예를 나열해 보겠습니다.

    1. 모든 요청과 일치하는 NGINX 위치

    다음 예에서 접두사 위치 /는 모든 요청과 일치하지만 일치하는 항목이 없으면 최후의 수단으로 사용됩니다.

    location / {
        ...
    }
    

    2. 정확한 URL과 일치하는 NGINX 위치

    NGINX는 항상 처음에 가장 구체적인 접두사 위치를 일치시키려고 시도합니다. 따라서 다음 위치 블록의 등호는 요청된 경로와 정확히 일치하도록 강제 실행한 다음 더 이상의 일치 검색을 중지합니다.

    location = /images { 
        ...
    }
    

    위의 위치 블록은 URL https://domain.com/images와 일치하지만 URL https://domain.com/images/index.html 또는 <https://domain.com/images/는 일치하지 않습니다.

    3. 디렉터리에 대한 NGINX 위치 블록

    다음 위치 블록은 /images/로 시작하는 모든 요청과 일치하지만 요청된 URI에 대한 보다 구체적인 블록을 계속 검색합니다. 따라서 NGINX가 더 이상 특정 일치 항목을 찾지 못하면 위치 블록이 선택됩니다.

    location /images/ {
         ...
         ...
    }
    

    4. NGINX 위치 RegEx 예제

    다음 위치 블록의 수정자 ^~는 대소문자를 구분하는 정규식 일치를 초래합니다. 따라서 URI /images 또는 /images/logo.png가 일치하지만 일치하는 항목이 발견되는 즉시 검색을 중지합니다.

    location ^~ /images {
       ...
       ...
    }
    

    5. 이미지/css/js 파일 유형에 대한 NGINX 위치 블록

    다음 위치 블록의 수정자 ~*는 png, ico, gif, jpg, jpeg, css 또는 js로 끝나는 요청(대소문자 구분 안 함)과 일치합니다. 그러나 /images/ 폴더에 대한 모든 요청은 이전 위치 블록에서 제공됩니다.

    location ~* .(png|ico|gif|jpg|jpeg|css|js)$ {
        ...
        ...
    }
    

    6. NGINX 위치 RegEx 대소문자 구분 일치

    다음 위치 블록의 수정자 ~는 대소문자를 구분하는 정규식 일치를 초래하지만 더 나은 일치 검색을 멈추지 않습니다.

    location ~ /images {
        ...
        ...
    }
    

    7. NGINX 위치 RegEx Case Insensitive Match 예

    다음 위치 블록의 수정자 ~*는 대소문자를 구분하지 않는 정규식 일치를 초래하지만 더 나은 일치를 위해 검색이 여기에서 멈추지 않습니다.

    location ~* /images {
         ...
         ...
    }
    

    요약

    NGINX 위치 지시어를 이해하는 것은 파일 시스템에서 요청된 URI의 끝점을 추적하는 데 필수적입니다. 이 문서에서 설명하는 수정자, 위치 블록 선택 단계 및 몇 가지 예는 NGINX에서 위치 블록을 쉽게 시작하는 데 도움이 됩니다.