Published 2022. 12. 2. 19:33

Location 블록이란?

location 블록은 Nginx에서 정의되어 있는 웹사이트의 특정 URL 을 조작하는데 사용되는 블록입니다.

Server 블록에 정의되어 있는 웹사이트마다 Location 을 지정할 수 있으며, Location 을 여러 번 정의할 수 있습니다.

Location 블록의 URL 구성과 패턴

location은 URI 경로의 일부인 prefix string이거나 정규식 표현이 될 수 있습니다.

다음 예시는 /some/path/document.html 과 같은 경로의 요청을 처리합니다.

// nginx.conf
location /some/path {
  ...
}

location context 안에 있는 directive는 요청을 어떻게 처리할지 정할 수 있습니다.

정적 파일(static file, ex. html, css, js file)을 보여주거나 proxy server로 요청을 전송합니다.

// nginx.conf
server {
    location /images/ {
        root /data;
    }

    location / {
        proxy_pass http://www.example.com;
    }
}

첫 번째 location context와 일치하는 패턴은 /data 디렉토리에서 파일들을 보여줍니다.

두 번째 location context와 일치하는 패턴은  www.example.com 도메인으로 요청을 전송합니다.

 

root 옵션 : 정적 파일(static file) 이 있는 파일 시스템의 경로입니다. root 뒤에 location의 경로가 추가된 상태로 파일의 경로를 찾습니다.

예시) /images/a.png의 요청이 들어오면 NGINX는 /data/images/a.png에서 파일을 찾습니다.

proxy_pass 옵션 : 위의 예시에서 /images/와 맞지 않는 모든 패턴의 요청은 프록시 서버로 전송됩니다. 이후 프록시 서버에서의 응답이 클라이언트에게 전송됩니다.

문법

location 문법은 위치 조정 부호와 패턴으로 구성됩니다.

위치 조정 부호는 특수 기호로 지정하고 패턴은 정규식 문자열을 사용할 수 있습니다.

위치 조정 부호는 선택사항입니다.

Syntax:	location [ = | ~ | ~* | ^~ ] [pattern] { ... }
location @name { ... }
Default:	—
Context:	server, location

각 위치 조정 부호 별 사용 예시

각 위치 조정 부호에 따른 예시는 다음과 같습니다.

# 모든 요청과 일치
location / {
    [ configuration A ]
}

# 정확하게 일치 
# matches with /images
# does not matches with /images/index.html or /images/
location = /images {
    [ configuration B ]
}

# 지정한 패턴으로 시작
# /static/ 으로 시작하는 요청과 일치 그러나 더 우선순위에 있는 location 블록 탐색함.
location /static/ {
    [ configuration C ]
}

# 지정한 패턴으로 시작, 패턴이 일치 하면 다른 패턴 탐색 중지( 정규식 아님 )
# matches with /images or /images/logo.png 
location ^~ /images {
    [ configuration D ]
}

# 정규식 표현 일치 - 대소문자 구분
location ~ \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

# 정규식 표현 일치 - 대소문자 구분 안함
location ~* \.(gif|jpg|jpeg)$ {
    [ configuration F ]
}

Location 블록 우선순위

다수의 Location 블록이 정의되어 있을 경우 Location 블록에 정의되어 있는 패턴에 우선순위에 따라 달라지게 됩니다.

 

1순위 = : 정규식이 정확하게 일치

예시) location = /static { ... }

 

2순위 ^~ : 정규식 앞부분이 일치

예시) location ^~ /static { ... }

 

3순위 ~ : 정규식 대/소문자 일치

예시) location ~ /static/ { ... }

 

4순위 ~* : 대/소문자를 구분하지 않고 일치

예시) location ~* .(jpg|png|gif)

 

5순위 / : 하위 일치

예시) location /static { ... }

 

필자가 실제로 프로젝트에 작성한 예시

Nginx 서버에 GET https://jjincafe-in-seoul.com/cafes/12345 요청이 들어오면 cafe-detail/index.html 파일을 서빙해줘야 합니다.

server {
    listen 443 ssl;
    server_name jjincafe-in-seoul.com;
    server_tokens off;
    root /usr/share/nginx;

    location / {
      root /usr/share/nginx/html;
    }

    location ~ ^/cafes/[1-9]+$ {
      try_files $uri /cafes/cafe-detail/index.html;
    }
}

출처

https://gonna-be.tistory.com/20#Configuration%20File%20%EA%B5%AC%EC%A1%B0%20%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0 

 

[NGINX] 꼭 알아야 할 configuration 기초 개념!

들어가며 NGINX를 사용하는데 있어 꼭 필요한 기초 개념들을 정리한 글입니다. 전반적인 기초를 다룬 뒤 NIGNX를 web server로 이용하는 방법에 초점을 두어 작성하였습니다. 또한 너무 자세한 내용은

gonna-be.tistory.com

http://nginx.org/en/docs/beginners_guide.html

 

Beginner’s Guide

Beginner’s Guide This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide de

nginx.org

https://www.digitalocean.com/community/tutorials/nginx-location-directive 

복사했습니다!