자습서-NGINX Unit Static File 구성해보기, 4부

이번 자습서에서는 NGINX Unit Static File 이라는 주제로 정적 파일(Static File)을 제공하는 실습을 진행해볼 것입니다. 지난 3부에는 NGINX Unit에서의 Proxy 기능을 구성하여 리버스 프록시로서의 동작을 확인해봤습니다.

NGINX Unit 앱 서버에서는 동적 요청(Dynamic Request)에 대한 코드(Code) 실행 뿐만 아니라, 정적 요청(Static Request)에 대한 정적 파일(Static File) 제공도 가능합니다.

앱 서버로 정적 파일(Static File)을 제공하는 기본적인 방법에 대해서 살펴보겠습니다.

목차

1. NGINX Unit Static File 디렉토리 및 정적 파일 구성하기
2. NGINX Unit Static File – JSON 구성 파일 작성하기
3. NGINx Unit Static File – 정적 파일 요청해보기
4. 결론

1. NGINX Unit Static File 디렉토리 및 정적 파일 구성하기

먼저 아래와 같은 디렉토리 구조를 생성하고 정적 파일(.html)을 준비합니다.

/www/static/
├──index.html

/www/static_fallback
├──index.html

/www/static/index.html 를 아래와 같이 작성합니다.

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>static 인덱스 페이지입니다.</title>
  </head>
  <body>
    static 인덱스 페이지입니다.
  </body>
</html>

/www/static_fallback/index.html 를 아래와 같이 작성합니다.

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>static_fallback 인덱스 페이지입니다.</title>
  </head>
  <body>
    static_fallback 인덱스 페이지입니다.
  </body>
</html>

2. NGINX Unit Static File – JSON 구성 파일 작성하기

static_file_config.json 파일을 작성합니다. Unit 구성의 route 속성을 사용하여 공유 작업 유형을 사용하는 경로 개체를 지정합니다.

{
  "listeners": {
    "*:8080": {
      "pass": "routes"
    }
  },

  "routes": [
    {
      "action": {
        "share": "/www/static/",
        "fallback": {
          "share": "/www/static_fallback"
        }
      }
    }
  ]

}

JSON 파일을 작성하였으면 NGINX Unit에 Restful API를 사용하여 동적 구성을 적용해보도록 하겠습니다.

“success” JSON 응답이 오면 동적 재구성에 성공한 것입니다.

sudo curl -X PUT --data-binary @static_file_config.json --unix-socket /var/run/control.unit.sock http://localhost/config


{
        "success": "Reconfiguration done."
}

3. NGINX Unit Static File – 정적 파일 요청해보기

NGINX Unit에 정적 파일을 제공해달라고 요청해보겠습니다. /www/static/index.html 정적 파일(Static File)로 응답하는 것을 확인 하실 수 있습니다.

$ curl http://192.168.250.228:8080

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>static 인덱스 페이지입니다.</title>
  </head>
  <body>
    static 인덱스 페이지입니다.
  </body>
</html>

이번에는 정적 파일(Static File)을 기본 제공하는 /www/static/ 디렉토리 내에 index.html의 확장자를 바꿔서 해당 경로에서 정적 파일 제공을 못하게 만들어봅시다.

/www/static/
├──index.html

index.html 파일을 index.index_x로 변경했습니다.

$ sudo mv index.html index.index_x

이제 NGINX Unit의 정적 파일 제공에 대한 기본 경로 /www/static/ 디렉토리 내에 클라이언트에게 제공할 정적 파일이 없으므로 fallback의 대체 경로 /www/static_fallback 디렉토리 내의 index.html 정적 파일이 대신하여 제공되는지 확인해보겠습니다.

$ curl http://192.168.250.228:8080

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>static_fallback 인덱스 페이지입니다.</title>
  </head>
  <body>
    static_fallback 인덱스 페이지입니다.
  </body>
</html>

/www/static_fallback/index.html 파일이 제공되는 것을 확인 하실 수 있습니다. 이 예는 로컬 파일 디렉토리 /www/static/의 모든 요청을 처리합니다. 파일을 찾을 수 없으면 NGINX Unit은 대체 위치(alternate location)인 /www/static_fallback으로 대체됩니다.

정적 콘텐츠를 제공할 때 응용 프로그램과 마찬가지로 사용자 속성이 지정되지 않습니다. 파일은 일반적으로 root로 실행되는 사용자 Unit의 액세스 권한으로 액세스됩니다.

share action 유형은 로컬 디렉터리의 정적 콘텐츠를 제공합니다. 이는 요청된 파일을 찾을 수 없거나 Unit에 액세스 권한이 부족한 경우 요청을 지시하는 방법을 Unit에 알려주는 fallback action과 함께 사용할 수 있습니다.
대체 작업은 요청을 전달, 프록시 또는 share action으로 라우팅할 수 있습니다. 대체가 요청을 다른 share action으로 보내는 경우 fallback(대체) action을 중첩할 수 있습니다.

4. 결론

NGINX Unit은 독립 실행형 웹 서버(Web Server)로도 작동하여 로컬 파일 시스템에서 정적 파일(Static File)을 효율적으로 제공할 수 있습니다.

NGINX Unit 공식 커뮤니티(슬랙 채널)는 NGINX STORE – Unit Community 메뉴를 통해 가입 가능합니다.

NGINX Unit에 대한 최신 포스트와 소식을 빠르게 받으시고 싶으시면 아래 뉴스레터를 구독하세요.