ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nginx) 변수 종류
    Programing Study/네트워크 2021. 8. 13. 14:46
    728x90
    반응형

    참고*https://opentutorials.org/module/384/4508

    예제

    아래와 같은 URL로 접근 했을 때 환경변수는 아래와 같다.

    http://opentutorials.org:80/production/module/index.php?type=module&id=12

    • $host : opentutorials.org
    • $uri : /production/module/index.php
    • $args : type=module&id=12
    • $query_string (same as $args)
    • server_addr : 115.68.24.88
    • server_name : localhost
    • server_port : 80
    • server_protocol : HTTP/1.1
    • $arg_type : module
    • $request_uri : /production/module/index.php?type=module&id=12
    • $request_filename : /usr/local/nginx/html/production/module/index.php

    $arg_PARAMETER

    PARAMETER는 파라미터 변수의 이름을 의미한다. 예를들어 http://opentutorials.org?mode=course 라는 요청이 있을 때 mode의 값은 $arg_mode를 통해서 알아낼 수 있다. 

    $host

    현재 요청의 호스트명. 호스트명은 일반적으로 머신이 위치하는 IP나 도메인을 의미한다.

    아래와 같은 요청이 있을 때 $host, $uri, $args의 값은 아래와 같다.

    $uri

    현재 요청의 URI. 호스트명과 파라미터는 제외 된다.

    document_uri

    $uri와 동일

    $args

    URL의 질의문자열.

    $binary_remote_addr

    바이너리 형식의 클라이언트 주소

    $body_bytes_sent

    전송된 바디의 바이트 수

    $content_length

    HTTP 요청헤더의 Content-Lenght와 동일

    $content_type

    HTTP 요청헤더의 Content-Type과 동일

    $document_root

    현재 요청의 document root 값이 root 지시어와 동일

    $http_HEADER

    HTTP 헤더의 값을 소문자로 대시(-)를 밑줄(_)로 변환한 값.

    예를들어 아래와 같은 요청이 있을 때

    1
    2
    3
    4
    5
    6
    7
    8
    GET http://192.168.125.143/course/module/index.html?mode=egoing HTTP/1.1
    Host: 192.168.125.143
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Cache-Control: max-age=0

    변수는 아래와 같다.

    • $http_host : 192.168.125.143
    • $http_connection : keep-alive

    $scheme

    HTTP의 구조로 http, https를 의미한다.

    $server_addr

    서버주소

    $server_name

    서버이름

    $server_port

    서버포트

    $server_protocol

    HTTP 요청 프로토콜 (HTTP/1.0 혹은 HTTP/1.1)

    $cookie_COOKIE

    cookie의 값을 알아내는 데 사용하는 변수. COOKIE의 값으로 cookie의 이름을 사용하면 해당 쿠키의 값을 얻을 수 있다. 예를들어 cookie_mode는 이름이 mode인 쿠키의 값을 의미한다. 

    참조

    본 토픽은 엔진엑스로 운영하는 효율적인 웹사이트를 참조했습니다. 

    ----------------------------------------------------------------------------------------------------------------------

    참고*https://minholee93.tistory.com/entry/Nginx-Location-Block-Variables

    4. Variables

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

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

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

     

     

    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 합니다.

     

     

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

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

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

    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 하는 것을 확인할 수 있습니다.


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

    728x90
    반응형
Designed by Tistory.