[Nginx] Location Block & Variables

반응형

이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다.

3. Location Blocks

location은 specific uri에 대한 behavior를 정의하며 server 내부에 작성합니다.

location block은 nginx.conf 에서 가장 많이 사용되는 configuration 이며, 기본적인 구조는 다음과 같습니다.

location structure

server {
    location uri {
        // hadnle response
    }
}

아래의 예시는 /greet request를 받은 경우 return 값으로 repsonse code로 200을 response data로 string을 넘겨줍니다.

nginx.conf

events {

}

http {

        include mime.types;

        server {
                listen 80;
                server_name 54.180.79.141;

                root /sites/demo;

                # prefix match
                location /greet {
                        return 200 'Hello from NGINX "/greet" location.';
                }
        }
}

브라우저에서 확인해보면 다음과 같이 정상적으로 값을 출력합니다.

image.png

3-1) prefix match

위에서 작성한 /greet은 prefix match 입니다.

# prefix match
location /greet {
      return 200 'this is prefix match';
}

즉 greet로 시작하는 모든 uri에 대해 동일한 결과값을 출력합니다.

image.png

3-2) exact match

완전히 매칭되는 uri에 대해서만 location을 지정하고 싶으면 아래와 같이 exact match를 사용합니다.

# exact match
location = /greet {
      return 200 'this is exact match';
}

3-3) regex match

매칭 condition에 regex를 사용할 수도 있습니다. 아래의 regex match는 /greet0 ~ /greet9 까지의 uri를 지정합니다. regex match는 case sensitive 합니다.

# case sensitive regex match
location ~ /greet[0-9] {
      return 200 'this is regex match';
}

case insensitive 하게 사용하고자한다면 아래와 같이 변경합니다.

# case insensitive regex match
location ~* /greet[0-9] {
      return 200 'this is regex match';
}

3-4) preferential prefix match

preferential prefix는 동작은 기존의 prefix와 동일하지만, priority에서 기존의 regex와 prefix보다 높은 우선순위를 갖습니다.

# preferential prefix match
location ^~ /greet {
      return 200 'this is regex match';
}

3-5) priority order

전체체적인 priority 순서는 다음과 같습니다.

exact > preferential > regex > prefix 

4. Variables

variable은 nginx.conf 에서 사용할 수 있는 변수를 의미합니다.

이러한 변수에는 사용자가 직접 정의해서 사용하는 configuration variable와 nginx에 내장되어 있는 NGINX module variable이 있습니다.

내장된 NGINX 변수는 http://nginx.org/en/docs/varindex.html 에서 확인할 수 있습니다.

image.png

4-1) nginx module variable

nginx module variable은 아래와 같이 사용할 수 있습니다.

location에서 module variable의 값을 직접 return 하기 위해선 "" 안에 $module_variable을 작성해 사용하면 됩니다.

# nginx module variable : $host / $uri / $args 
location /inspect {
    return 200 "$host\n$uri\n$args";
}

위의 /inspect를 호출하면 아래와 같은 결과값을 return 합니다.

image.png

만약 $args에서 name args의 value만 추출하고 싶다면 아래와 같이 입력해 사용할 수 있습니다.

# return only name args value
location /inspect {
    return 200 "$args_name";
}

결과값은 아래와 같습니다.

image.png

4-2) configuration variable

configuration variable은 if와 같은 conditional state를 작성할때 주로 사용합니다.

다만, conditinal state를 location 내부에 작성하는것은 권장하지 않습니다. 만약 location 내부에 작성할 경우 의도치 않은 행동이 발생할 수 있습니다.

간단한 conditional state는 아래와 같이 작성할 수 있습니다.

server {
         # configuration variable
         set $weekend 'No';

         # check if weekend
         if ( $date_local ~ 'Saturday|Sunday' ){
                 set $weekend 'Yes';
         }

         # return $weekend value
         location /is_weekend {    
                 return 200 $weekend;
        }
}

위의 내용을 해석해보면 $weekend 변수를 configuration variable로 선언해 사용하며 NGINX module variable인 $date_local 를 사용해 오늘이 토/일 요일 경우에만 $weekend 변수를 'Yes'로 변경합니다.

위와 같이 작성하고 호출해보면 아래와 같이 결과값을 return 하는 것을 확인할 수 있습니다.

image.png

다음글로 이어집니다.. 😎


참고 자료 : https://www.udemy.com/course/nginx-fundamentals/


반응형

'Nginx' 카테고리의 다른 글

[Nginx] Logging  (0) 2020.08.27
[Nginx] Try Files & Named Location  (0) 2020.08.27
[Nginx] Redirect & Rewrite  (0) 2020.08.27
[Nginx] Configuration  (1) 2020.08.27
[Nginx] Overview & Install  (0) 2020.08.27

댓글

Designed by JB FACTORY