자습서-NGINX Unit 동적 구성 맛보기!, 1부

NGINX Unit 동적 구성 맛보기 1부, NGINX Unit의 자습서 시리즈를 시작합니다.

자습서를 시작하기에 앞서 NGINX Unit 앱(App) 서버에 대해 모르시는 분들은 NGINX Unit 앱 서버 소개 포스트를 꼭 읽어주셔서 개념을 잡아주시는게 좋습니다.

본 자습서는 NGINX Unit이 설치 되었다는 전제로 자습서를 시작합니다. (자습 환경은 Ubuntu 22.04 x86-64입니다. NGINX Unit 설치 공식 한글 매뉴얼을 참고하세요.)

먼저 /www/helloworld/index.php 경로에 PHP 언어의 애플리케이션(Application)을 하나 만들어 보겠습니다.

<?php echo "Hello, PHP on Unit!\n"; ?>

애플리케이션(Application) 이름은 helloworld 로 하여 아래 앱(App) 서버 구성 경로에 json 포맷으로 작성합니다. 파일명은 config.json 입니다.

{
  "helloworld": {
    "type": "php",
    "root": "/www/helloworld/"
  }
}

오늘 자습서에서 보여주고자 하는 NGINX Unit의 강력한 기능인 Restful API를 통한 동적 구성(Dynamic Configuration)의 예입니다. curl 명령어를 사용하여 config.json 파일과 unit socket 경로를 지정하여 config/applications 경로로 요청합니다.

# curl -X PUT --data-binary @config.json --unit-socket \
    /var/run/control.unit.sock http://localhost/config/applications

요청과 동시에 동적으로 구성이 변경되었으며 hellworld 라는 첫 php 애플리케이션이 생성되었습니다.

{
    “success”: “Reconfiguration done.”
}

정상적인 클라이언트의 요청을 수신하려면 리스너를 생성해야 합니다. 아래 명령어를 수행하여 리스너 객체를 추가합니다. 이번에는 config.json 파일을 사용하지 않고, 직접 json 포맷으로 구성 정보를 정의하여 전달합니다.

# curl -X PUT -d '{"127.0.0.1:8080": {"pass": "applications/helloworld"}}' \
    --unit-socket /var/run/control.unit.sock http://localhost/config/listeners

이제 현재 NGINX Unit의 전제 구성 상태를 확인해봅시다.

# curl --unix-socket /var/run/control.unit.sock http://localhost/config/

전체 구성에는 리스너 객체와 애플리케이션 객체 두 개가 구성되어 있습니다. 현재 NGINX Unit의 구성 상태를 Restful API로 요청하여 json 포맷으로 확인하실 수 있습니다.

{
    "listeners": {
        "127.0.0.1:8080": {
            "pass": "applications/helloworld"
        }
    },

    "applications": {
        "helloworld": {
            "type": "php",
            "root": "/www/helloworld/"
        }
    }
}

curl 명령어를 사용하여 클라이언트 요청을 보내보겠습니다.

$ curl 127.0.0.1:8080
 Hello, PHP on Unit!

NGINX Unit 동적 재구성 기능은 Restful API를 통해 제공되며 JSON 포맷을 사용합니다. 변경 사항은 다시 로드 하거나 진행 중인 요청에 대한 중단 없이 즉시 적용됩니다. API를 통해 단일 값을 수정하거나 전체 구성을 바꿀 수 있습니다.

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

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

NGINX STORE 뉴스레터 및 최신 소식 구독하기

* indicates required