작은숲:위키노트/Nginx location 지시자: 두 판 사이의 차이

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
잔글 (문자열 찾아 바꾸기 - "분류:웹" 문자열을 "분류:위키노트/웹" 문자열로)
잔글 (문자열 찾아 바꾸기 - "분류:서버" 문자열을 "분류:위키노트/서버" 문자열로)
32번째 줄: 32번째 줄:
[[분류:위키노트/공유]]
[[분류:위키노트/공유]]
[[분류:위키노트/웹]]
[[분류:위키노트/웹]]
[[분류:서버]]
[[분류:위키노트/서버]]
[[분류:위키노트/소프트웨어 설정]]{{퍼온문서|위키노트|{{#invoke:string|replace|{{PAGENAME}}|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]]
[[분류:위키노트/소프트웨어 설정]]{{퍼온문서|위키노트|{{#invoke:string|replace|{{PAGENAME}}|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]]

2021년 3월 28일 (일) 12:38 판

Nginx에서 특정 디렉토리나 파일에 대한 재지정(rewrite) 같은 설정을 할 때 쓰는 것이 location 지시자이다. 이 location 지시자는 serverlocation 블럭에 들어갈 수 있다. 기본 구문은 아래와 같다.

location [ = | ~ | ~* | ^~ ] uri { ... }

브라우저가 요청하는 주소가 uri와 비교되며, 어떻게 비교할 것인지는 앞에 나오는 =, ~, ~*, ^~ 변경자(modifier)에 의해 결정된다. 아무 변경자도 쓰지 않고 비교하는, 즉 단순히 주소의 앞에 uri가 있는지만 검사하는 것까지 합해서 모두 5가지의 검사 방법이 있다.

location 지사자의 변경자

location uri { ... }
요청한 주소의 앞에 uri가 있는지 검사한다.
location = uri { ... }
요청한 주소가 uri와 정확히 일치하는지 검사한다.
location ~ uri { ... }
정규 표현식으로 표현된 uri로 요청한 주소를 비교한다. 이때 대소문자를 구분한다.
location ~* uri { ... }
정규 표현식으로 표현된 uri로 요청한 주소를 비교한다. 이때 대소문자를 구분하지 않는다.
location ^~ uri { ... }
요청한 주소의 앞에 uri가 있는지 검사한다. 정규 표현식 변경자보다 우선순위가 높다.

location 지시자의 우선순위

이렇게 주소를 검사할 때 여러 location 지시자와 비교될 수 있는데 거기에는 우선순위가 있다.

  1. = 변경자에 의해 정확히 일치하는 location 지시자가 있으면 그 지시자의 설정이 쓰이고 검사는 중단된다.
  2. 요청한 주소 앞에 uri가 있는지 검사하는 location 지시자들 중 가장 길게 일치하는 지시자를 일단 기억해 놓는다.
  3. 2번에서 가장 길게 일치하는 지시자에 ^~ 변경자가 있으면 이 지시자의 설정이 사용되고 검사는 중단된다.
  4. 정규 표현식 변경자(~, =*)를 사용하는 지시자 중 설정 파일에서 가장 먼저 나온 지시자가 사용된다.
  5. 정규 표현식 변경자 중 일치하는 것을 찾지 못하면 2번 항목에서 기억해 놓은 지사자의 설정을 사용한다.

뭔가 상당히 복잡하지만 체계가 있다. 이런 우선순위 때문에 복잡한 설정도 가능하지만 그만큼 문제가 생길 소지도 많다. 복잡한 설정은 뇌를 갉아 먹는다.

참고

이 작은숲 문서의 출처는 위키노트의 위키노트/Nginx location 지시자 문서입니다.