NGINX Plus R13 출시 발표

NGINX | 2017년 8월 29일

NGINX Plus Release 13(R13)이 출시되어 모든 NGINX Plus 구독자에게 무료 업그레이드로 제공된다는 소식을 기쁘게 알려드립니다. NGINX Plus는 NGINX Open Source를 기반으로 구축된 웹 서버, 로드 밸런서 및 콘텐츠 캐시 통합 제품입니다. NGINX Plus R13에는 동적 배포, 향상된 디버깅 기능, 보안 및 성능 개선에 중점을 둔 새로운 기능이 포함되어 있습니다.

NGINX Plus R13에서는 다음 기능에 대한 지원이 도입되었습니다:

  • 새로운 NGINX Plus API – 하나로 통합된 엔드포인트에서 동적 구성을 수행하고 확장된 상태 메트릭을 가져올 수 있습니다. 또한 이 API는 키-값 저장소도 지원합니다.
  • 요청 미러링 – 모든 수신 트래픽의 복사본을 전용 서버로 전송하여 프로덕션 서버의 성능에 영향을 주지 않고 애플리케이션 트래픽을 모니터링하고 검사하며 기록할 수 있습니다.
  • NGINX JavaScript 모듈 개선 사항 – NGINX의 자체 JavaScript 구현인 NGINX JavaScript 모듈을 사용해 프로그래밍 방식으로 구성하여 NGINX Plus를 확장할 수 있습니다. [이 모듈의 이전 명칭은 nginScript였습니다.] 새로운 njs 대화형 셸은 JavaScript의 모든 기본 제공 객체를 보여 주는 콘솔을 제공합니다. 이러한 객체를 더 자세히 살펴보면 각 객체에서 사용할 수 있는 메서드와 기본 요소를 확인할 수 있습니다.
  • 동적 모듈용 빌드 도구 – 새로운 빌드 도구를 사용하여 다양한 타사 모듈을 NGINX 및 NGINX Plus에 설치할 수 있는 패키지로 만드세요.

그 밖의 개선 사항으로는 세션 지속성을 위한 sticky learn 방식의 개선, HTTP 트레일러 지원, HTTP 치환을 위한 새로운 타사 동적 모듈이 있습니다.

동작 변경 사항

NGINX R13 기능 상세 정보

NGINX Plus API

NGINX Plus R13에는 새로운 REST API가 단일 엔드포인트로 통합되어 있습니다. 이전 버전의 NGINX Plus에는 Upstream Conf API와 Extended Status API가 별도로 포함되어 있었습니다. 새로운 API는 두 API의 기능을 통합하며, 동적 구성을 위한 다양한 사용 사례에서 새로운 Key‑Value Store 모듈도 지원합니다(아래의 Key‑Value Store 섹션에서 설명).

NGINX Plus API를 활성화하려면 새로운 api 지시어를 location 블록에 포함하세요:

server {    listen 80;

    location /api {
        api write=on;
        # directives that allow access only by authorized users
    }
}

기본적으로 NGINX Plus API는 데이터에 대한 읽기 전용 액세스를 제공합니다. write=on 매개변수를 api 지시문에 추가하여 읽기/쓰기 액세스를 활성화하면 업스트림 서버와 새로운 키-값 저장소 모듈을 변경할 수 있습니다. 특히 읽기/쓰기 모드가 활성화된 경우 API 액세스를 승인된 사용자로만 제한할 것을 강력히 권장합니다.

API 엔드포인트에서 제공되는 모든 정보 유형을 확인하려면 다음 명령을 실행합니다:

$ curl http://localhost:80/api/1/ ["nginx","processes","connections","ssl","slabs","http","stream"]

특정 유형의 정보에 대한 세부 정보를 표시하려면 요청 URI에 적절한 문자열을 추가합니다:

  • connections – 총 연결 수에 대한 메트릭 표시
  • http – HTTP 트래픽에 대한 메트릭을 표시하고 HTTP 업스트림 구성을 수정합니다. 또한 http에는 두 가지 "하위 유형"이 있습니다:
    • http/server_zones – HTTP 가상 서버에 대한 정보 표시
    • http/upstreams – HTTP 업스트림 서버 그룹에 대한 정보를 표시하고 해당 구성을 수정합니다
  • nginx – NGINX에 대한 일반 정보 표시
  • processes – NGINX 워커 프로세스에 대한 정보 표시
  • slabs – NGINX에서 할당한 공유 메모리 정보 표시
  • ssl – SSL/TLS 클라이언트의 메트릭을 실시간으로 표시
  • stream – TCP/UDP 트래픽에 대한 메트릭을 표시하고 TCP/UDP 업스트림 서버 그룹의 구성을 수정합니다(stream/upstreams에서)

확장 상태 모니터링

NGINX Plus는 NGINX Open Source에서 제공되는 메트릭 외에도 40개 이상의 독점 메트릭을 제공합니다. 이제 NGINX Plus API를 사용하여 이러한 메트릭에 액세스할 수 있습니다. API를 사용하여 중요한 메트릭에 액세스하세요.

예를 들어 URI에 connections를 추가하면 연결 상태의 스냅샷이 출력됩니다. 여기에는 수락된 클라이언트 연결, 활성 클라이언트 연결, 끊어진 클라이언트 연결 및 유휴 클라이언트 연결 수가 포함됩니다.

$ curl http://localhost:80/api/1/connections{"accepted":3,"dropped":0,"active":1,"idle":0}

또 다른 예로, URI에 ssl을 추가하면 SSL 클라이언트 통계의 스냅샷을 실시간으로 출력할 수 있습니다.

$ curl http://localhost:80/api/1/ssl {"handshakes":0,"handshakes_failed":0,"session_reuses":0}

업스트림 서버 그룹의 동적 구성

NGINX Plus R12 및 이전 버전에서는 upstream_conf 지시어를 사용하여 NGINX Plus를 다시 로드하지 않고도 기존 업스트림 서버 그룹을 동적으로 구성할 수 있었습니다. 이제 이 기능은 NGINX Plus API에 통합되었습니다.

이 NGINX Plus 구성 스니펫은 backend라는 업스트림 그룹에 두 개의 서버를 정의하고, /api에서 NGINX Plus API를 활성화합니다:

upstream backend {    zone backends 64k;
    server 10.10.10.2; 
    server 10.10.10.4;
}

server {
    listen 80;
    server_name www.example.org;

    location /api {
        api write=on;
    }
}

서버를 backend 그룹에 추가하려면 -d 옵션을 포함한 curl 요청을 /api/1/http/upstreams/backend/servers에 보내고, 새 서버의 IP 주소(여기서는 10.10.10.6)를 정의하는 JSON 텍스트를 함께 전달합니다. -i 옵션을 사용하면 응답에 HTTP 헤더가 포함됩니다. (-d를 사용하면 기본 메서드가 POST이므로 -X POST는 생략할 수 있지만, 다른 메서드와의 일관성을 위해 여기서는 포함합니다.)

$ curl -iX POST -d '{"server":"10.10.10.6"}' http://localhost/api/1/http/upstreams/backend/serversHTTP/1.1 201 Created
...

업스트림 그룹을 구성하는 모든 옵션에 대한 자세한 내용은 NGINX Plus API 모듈의 참조 문서를 확인하세요.

키-값 저장소

NGINX Plus R13에서는 새로운 키-값 저장소 모듈을 도입합니다. NGINX Plus API를 사용하면 하나 이상의 “keyval” 공유 메모리 영역에서 키-값 쌍을 즉시 생성, 수정 및 제거할 수 있습니다. 그런 다음 각 키-값 쌍의 값을 다른 NGINX Plus 기능에서 사용할 변수로 평가할 수 있습니다.

키-값 저장소에서 항목을 추가, 수정, 조회 및 삭제하려면 각각 POST, PATCH, GET, DELETE HTTP 메서드를 사용합니다. 키-값 저장소는 외부 시스템과 실시간으로 통합할 수 있도록 다양한 동적 구성 솔루션을 제공합니다.

사용 사례는 다음과 같습니다:

  • 동적 IP 차단 목록 설정(NGINX Plus 관리자 가이드 참조)
  • URI를 백엔드 서버로 라우팅
  • 사용자별 허용 URI 목록 관리
  • 리디렉션 규칙 관리(다음 예시 참조)

다음 구성 코드 조각에서는 Key-Value Store 모듈을 사용하여 웹사이트의 사용자 지정 URL을 관리합니다.

keyval_zone zone=redirects:1M state=state/redirects.json;  # Save key-val pairs to filekeyval $uri $target zone=redirects;                        # $uri is the key, $target is the value

server {
    listen 80;

    location /api {
        api write=on; # Enable the NGINX Plus API (secure this location in production environments)
    }

    if ($target) {          # True when $uri exists in the 'redirects' keyval zone
        return 301 $target; # Redirect client to the matching value for the $uri
    }

    location / {
        proxy_pass http://backend;
    }
}

In the keyval 지시문에서 키는 HTTP 요청을 보내는 원격 시스템의 URI로 설정됩니다. $uri가 키-값 저장소의 키인 경우, 해당 키와 연결된 값이 $target이라는 새 변수에 할당됩니다. 그런 다음 $target이 존재하면 NGINX Plus는 클라이언트를 $uri에 해당하는 값으로 리디렉션합니다.

키-값 저장소에 초기 단축 URL을 추가하려면 데이터를 JSON으로 인코딩하여 NGINX Plus API의 URI로 전송합니다.

$ curl -iX POST -d '{"/conf":"/conf2017"}' http://localhost/api/1/http/keyvals/redirectsHTTP/1.1 201 Created
...

이제 /conf를 요청하는 클라이언트는 /conf2017로 리디렉션됩니다.

$ curl -i http://localhost/confHTTP/1.1 301 Moved Temporarily
Location: http://localhost/conf2017

You can use the PATCH 메서드를 사용하여 키-값 저장소에 사용자 지정 URL 리디렉션을 더 추가하고 기존 항목을 동적으로 수정할 수 있습니다.

$ curl -iX PATCH -d '{"/conf":"/conf2018"}' http://localhost/api/1/http/keyvals/redirectsHTTP/1.1 204 No Content
...

각각에 서로 다른 공유 메모리 영역을 정의하는 keyval 지시어를 사용하여 여러 개의 독립적인 키-값 저장소를 구성할 수 있습니다. 자세한 내용은 키-값 저장소 모듈의 참조 문서를 확인하세요.

Swagger 문서

새로운 NGINX Plus API에는 API를 살펴보고 각 리소스의 기능을 파악하는 데 사용할 수 있는 Swagger 사양이 포함되어 있습니다. Swagger 문서는 NGINX Plus에 번들로 제공되며 http://nginx-host/swagger-ui/에서 액세스할 수 있습니다.

Swagger UI의 대화형 기능을 사용하려면 NGINX Plus API를 활성화해야 합니다. 이를 위해 /api/ 위치 블록의 주석을 conf.d/default.conf 파일에서 해제하면 됩니다.

# enable /api/ location with appropriate access control in order# to make use of NGINX Plus API
#
#location /api/ {
#    api write=on;
#    allow 127.0.0.1;
#    deny all;
#}

NGINX Plus API 문서는 다음에서도 살펴볼 수 있습니다: https://demo.nginx.com/swagger-ui/.

참고: 확장 상태 메트릭, 업스트림 구성 및 새로운 키-값 저장소 모듈을 포함한 전체 NGINX Plus API는 NGINX Plus에서만 사용할 수 있습니다.

요청 미러링

NGINX Plus R13에서는 HTTP 요청 미러링을 활성화할 수 있습니다. 이 기능을 사용하면 업스트림 그룹으로 프록시되는 HTTP 요청이 복제되어 다른 대상으로도 전송됩니다. 원본 요청은 평소와 같이 처리되지만, 복제된 요청에서 반환되는 응답은 모두 무시됩니다. 요청 미러링은 다음을 비롯한 다양한 용도로 활용할 수 있습니다:

  • 학습 모드로 배포된 웹 애플리케이션 방화벽(WAF)과 통합하여 프로덕션 트래픽에 영향을 주지 않고 일반적인 요청 패턴을 분석
  • 실제 프로덕션 트래픽을 활용한 위험 부담 없는 성능 튜닝
  • 웹 서버 간 파일 시스템 복제를 피하기 위해 백업 서버에 업로드된 파일을 복제

요청 미러링을 활성화해도 전체 시스템 처리량과 성능에 미치는 영향은 미미합니다. 다음 구성 코드 조각은 새로운 mirror 지시어를 사용하여 요청을 복제하고 별도의 업스트림 서버로 전달하는 방법을 보여 줍니다.

location / {    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}

요청은 일반적인 처리를 위해 backend 업스트림 그룹으로 프록시됩니다. 또한 요청이 복제되어 test_backend라는 별도의 업스트림 그룹으로 프록시되며, 이때 원래 요청의 URI가 유지됩니다.

참고: 요청 미러링은 NGINX Open Source 1.13.4에서 처음 출시되었습니다.

NGINX JavaScript 모듈의 향상된 기능

Since becoming generally available in NGINX Plus R12에서 정식 출시된 이후 NGINX JavaScript 모듈(이전 명칭: nginScript)은 핵심 JavaScript 언어 지원 기능을 지속적으로 확장해 왔습니다. 이번 릴리스에서는 16진수(예: 0x7b)와 과학적 표기법(예: 512e10)을 지원합니다. 또한 Object 클래스의 기본 메서드도 구현되었습니다.

이제 NGINX JavaScript는 NGINX JavaScript 코드 개발을 지원하기 위해 njs 명령으로 실행하는 대화형 셸도 제공합니다.

다음 셸 코드 조각은 NGINX JavaScript 대화형 셸을 실행하고, 현재 시점부터 최대 30초 이내의 임의 날짜를 생성하는 표현식을 정의한 다음, 두 숫자의 합을 계산하는 방법을 보여줍니다.

$ njsinteractive njscript
>> Date.now() + Math.round(Math.random()*30*1000);
1500976350968
>> 0x7b + 512e10;
5120000000123
>>

자세한 내용은 블로그의 NGINX JavaScript<.htmla> 소개를 참조하세요.

참고: NGINX JavaScript는 NGINX Open Source와 NGINX Plus 모두에서 사용할 수 있습니다.

동적 모듈용 빌드 도구

NGINX 1.11.5와 NGINX Plus R11부터 NGINX 자체와 별도로 동적 모듈을 컴파일할 수 있습니다. 따라서 NGINX 및 NGINX Plus 사용자는 NGINX, Inc. 리포지토리의 공식 빌드를 사용하면서 필요한 동적 모듈만 로드할 수 있습니다.

NGINX Plus R13에서는 동적 모듈을 컴파일하고 설치 가능한 모듈로 패키징할 수 있는 빌드 도구를 제공합니다. 이 도구는 동적 모듈과 해당 모듈이 링크된 기본 NGINX 버전 간의 종속성을 유지하고 준수합니다.

빌드 도구에 대한 자세한 내용은 블로그의 동적 모듈용 설치 가능 패키지 만들기를 참조하세요.

참고: 빌드 도구는 NGINX Open Source와 NGINX Plus 모두에서 사용할 수 있습니다.

더욱 빨라진 Sticky-Learn 세션 지속성

세션 지속성은 특정 클라이언트의 모든 요청을 하나의 서버로 보낼 수 있게 해 주는 NGINX Plus 로드 밸런싱의 매우 유용한 기능입니다. 세션 지속성을 설정하는 방법은 여러 가지가 있습니다. 그중 “sticky learn” 방식에서는 NGINX Plus가 특정 쿠키의 존재 여부를 확인하고, 요청에 해당 쿠키가 포함될 때마다 클라이언트를 동일한 서버에 고정합니다.

NGINX Plus R13에서는 이제 업스트림 서버가 전체 응답 페이로드를 모두 보낼 때까지 기다리지 않고 응답 헤더를 보내는 즉시 고정 세션을 설정할 수 있습니다. 따라서 NGINX Plus는 가능한 한 빨리 고정 세션을 클라이언트에 전송할 수 있습니다. header 매개변수를 sticky learn 지시문에 새로 추가하십시오:

upstream backends {    zone backends 64k;
    server 10.10.10.2; 
    server 10.10.10.4;
   
    sticky learn create=$upstream_cookie_sessionid
                 lookup=$cookie_sessionid
                 zone=client_sessions:1m
                 header;
 }

애플리케이션에서 오류가 자주 발생하여 클라이언트가 실패한 요청을 동일한 업스트림 서버로 다시 보내도록 하려는 경우, header 매개변수가 특히 유용합니다.

참고: Sticky‑learn 세션 지속성은 NGINX Plus에서만 사용할 수 있습니다.

추가 기능

NGINX Plus R13에는 다음과 같은 추가 기능이 도입되었습니다:

  • HTTP 트레일러 – add_trailer 지시문을 사용하면 임의의 트레일러를 HTTP 응답 끝에 추가할 수 있습니다. 트레일러 응답 헤더를 사용하면 발신자가 청크 분할 메시지의 끝에 추가 필드를 포함하여 메시지 본문을 전송하는 동안 동적으로 생성될 수 있는 메타데이터(예: 메시지 무결성 검사 또는 디지털 서명)를 제공할 수 있습니다.
  • 치환 필터 동적 모듈 – HTTP 치환 필터 커뮤니티 동적 모듈이 이제 지원되며 NGINX Plus 배포판에 포함됩니다. 이 모듈은 응답 본문에 정규식 및 고정 문자열 치환을 모두 적용할 수 있습니다. 출력 체인 버퍼를 스캔하여 문자열을 한 줄씩 일치시킵니다. 또한 동적 모듈 페이지에서도 이 모듈을 확인할 수 있습니다.
  • 정상적인 워커 종료 – worker_shutdown_timeout 지시문을 사용하여 워커 프로세스가 정상적으로 더 빠르게 종료되도록 제한 시간을 설정합니다. 종료 또는 재시작 신호를 받은 후 제한 시간이 만료되면 NGINX Plus는 열려 있는 모든 클라이언트 연결을 닫으려고 시도합니다.

R13으로 업그레이드하거나 NGINX Plus 사용해 보기

NGINX Plus를 사용 중이라면 가능한 한 빨리 릴리스 13으로 업그레이드하시기를 적극 권장합니다. 여러 수정 사항과 개선 사항이 적용되며, 지원 티켓을 제출해야 할 때 더 원활하게 도움을 받으실 수 있습니다. 설치 및 업그레이드 지침은 고객 포털에서 확인할 수 있습니다.

업그레이드를 진행하기 전에 이 블로그 게시물에 설명된 새로운 기능과 동작 변경 사항을 주의 깊게 검토하시기 바랍니다.

아직 NGINX Plus를 사용해 보지 않으셨다면 웹 가속, 부하 분산 및 애플리케이션 전송을 위해, 또는 향상된 모니터링 및 관리 API를 갖춘 완전한 지원이 제공되는 웹 서버로 사용해 보시기 바랍니다. 지금 무료로 30일 평가판을 시작하여 NGINX Plus가 애플리케이션을 제공하고 확장하는 데 어떻게 도움이 되는지 직접 확인해 보세요.


공유
태그: Security

작성자 소개

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.