NGINX Plus R34 출시

F5 NGINX Plus R34의 출시를 발표하게 되어 기쁘게 생각합니다. NGINX Open Source를 기반으로 하는 NGINX Plus는 유일한 ALL-IN-ONE 소프트웨어 웹 서버, 로드 밸런서, 리버스 프록시, 콘텐츠 캐싱 및 API Gateway 입니다.

NGINX Plus R34의 새롭고 향상된 기능은 다음과 같습니다.

  • NGINX 사용량 보고를 위한 포워드 프록시 지원: NGINX Plus R34를 통해 NGINX Plus 고객은 기존 엔터프라이즈 포워드 프록시를 통해 라이선스 사용량 원격 분석을 F5로 전송할 수 있습니다.
  • OpenID Connect 구성에 대한 기본 지원: 이번 NGINX Plus R34를 통해 NGINX Plus에서 기본 OpenID Connect(OIDC) 모듈을 사용할 수 있게 되었습니다. 네이티브 모듈은 기존 njs 기반 솔루션의 많은 복잡성을 해결하면서 단순화된 구성과 더 나은 성능을 제공합니다.
  • SSL 동적 인증서 캐싱: R32의 인증서 캐싱 개선 사항을 기반으로 구축된 NGINX Plus R34는 동적 인증서 캐싱 및 구성 리로드 시 이 캐시 보존 지원을 도입합니다.

목차

1. 중요한 변화
2. 변경된 운영 체제 지원
3. 새로운 기능

3-1. NGINX 사용량 보고를 위한 포워드 프록시 지원
3-2. 구성
3-3. OpenID Connect 구성에 대한 기본 지원
3-4. 구성
3-5. SSL 인증서 캐싱 개선
4. 기타 향상 및 버그 개선 사항

4-1. Keepalive timeout 개선
4-2. 향상된 Health Check Logging
4-3. Session Key 크기 증가
5. Open Telemetry 모듈의 변경 사항
6. NGINX Open Source에서 상속된 변경 사항
7. NGINX JavaScript 모듈 변경 사항

1. 중요한 변화

OpenTracing 모듈 제거: NGINX Plus R32에서는 NGINX Plus R29에 도입된 OpenTelemetry 모듈을 위해 OpenTracing 모듈의 사용 중단을 발표했습니다. 그리고 NGINX Plus R34에서 제거될 것으로 표시되었습니다. 이번 R34부터 OpenTracing은 NGINX Plus에서 제거됩니다.

2. 변경된 운영 체제 지원

추가된 운영 체제입니다:

  • Alpine Linux 3.21

제거된 운영 체제입니다.

  • Alpine Linux 3.17
  • SLES12

더 이상 사용되지 않는 운영 체제입니다:

  • Alpine Linux 3.18
  • Ubuntu 20.04

3. 새로운 기능

3-1. NGINX 사용량 보고를 위한 포워드 프록시 지원

이전 NGINX Plus R33에서 모든 NGINX 고객이 상업용 NGINX 사용량을 F5에 보고해야 하는 NGINX Plus 라이선싱에 주요 변경 사항을 도입했습니다.

이 기능에 대해 받은 주요 피드백 중 하나는 주로 NGINX 인스턴스가 F5 라이선싱 엔드포인트에 직접 연결할 수 없는 환경을 위해 아웃바운드 프록시를 통해 원격 측정을 전송할 수 있도록 해야한다는 것이었습니다.

NGINX Plus R34는 고객 환경에서 기존 포워드 프록시 솔루션을 사용하여 라이선싱 텔레메트리를 F5로 전송할 수 있도록 지원하게 된 것을 기쁘게 생각합니다.

이 업데이트를 통해 이제 HTTP CONNECT 프록시를 사용하여 F5 라이선싱 엔드포인트에 터널을 설정하여 사용량 원격 분석을 전송하도록 NGINX Plus를 구성할 수 있습니다.

3-2. 구성

다음 스니펫은 포워드 프록시 솔루션을 통해 NGINX 사용량 원격 측정을 전송하기 위해 ngx_mgmt_module에 필요한 기본 NGINX 구성을 보여줍니다:

mgmt {
    proxy HOST:PORT;
    proxy_username USER;    #optional
    proxy_password PASS;    #optional
}

3-3. OpenID Connect 구성에 대한 기본 지원

현재 NGINX Plus는 오류가 발생하기 쉬운 복잡한 JavaScript 파일과 고급 설정 단계를 포함하는 njs 기반 솔루션에 의존하여 OIDC(OpenID Connect)를 구현하고 있습니다.

NGINX Plus R34를 통해 NGINX Plus에 네이티브 OIDC 지원을 도입하게 되어 매우 기쁩니다. 이 네이티브 구현은 njs 기반 접근 방식의 많은 복잡성을 제거하여 njs 모듈 유지 및 업그레이드에 대한 부담스러운 오버헤드 없이 더 빠르고 효율적이며 매우 쉽게 구성할 수 있습니다.

이를 위해 인증 코드 플로우를 사용하여 OIDC에서 신뢰 당사자로서의 인증을 구현하는 새로운 모듈 ngx_http_oidc_module이 NGINX Plus R34에 도입되었습니다.

기본 구현을 통해 전 세계적으로 또는 보다 더 세분화된 서버별 또는 로케이션별 수준에서 OIDC 인증을 유연하게 사용할 수 있습니다. 또한 각 ID 공급자(IdP)에 대한 복잡한 외부 스크립트 없이도 OpenID 공급자(provider’s)의 구성 메타데이터를 손쉽게 자동 검색할 수 있어 구성 프로세스가 크게 간소화됩니다.

NGINX Plus에서 기본으로 구현된 OIDC의 기능에 대한 전체 개요와 예시, 그리고 njs 기반 구현에 비해 어떻게 개

선괴었는지에 대한 자세한 내용은 여기를 참조하세요.

3-4. 구성

NGINX Plus에서 기본적으로 OIDC를 설정하는 구성은 njs 기반 구현과 비교할 때 최소한의 지시문만 있으면 비교적 간단합니다.

http { 
    resolver 10.0.0.1; 
 
    oidc_provider my_idp { 
        issuer        "https://provider.domain"; 
        client_id     "unique_id"; 
        client_secret "unique_secret"; 
    } 
 
    server { 
        location / { 
            auth_oidc my_idp; 
 
            proxy_set_header username $oidc_claim_sub; 
            proxy_pass       http://backend; 
        } 
    } 
} 

이 예에서는 OpenID 공급자(provider’s) 측에서 “https://<nginx-host>/oidc_callback&#8221; redirection URI가 구성되어 있다고 가정합니다.

다양한 ID 공급자에 대한 기본 OIDC 모듈을 구성하는 방법에 대한 지침은 NGINX 배포 가이드를 참조하세요.

3-5. SSL 인증서 캐싱 개선

NGINX Plus R32에서는 다양한 SSL object를 캐시하고 캐시된 object를 구성의 다른 곳에서 재사용하는 변경 사항을 도입했습니다. 이를 통해 주로 소수의 고유한 object가 여러 번 참조되는 초기 구성 로드 시간이 눈에 띄게 개선되었습니다.

R34에서는 이 기능을 더욱 개선하여 캐시된 SSL 개체를 구성 리로드 전반에 걸쳐 재사용하여 리로드 속도를 더욱 높일 수 있습니다. 또한 변수가 있는 SSL 인증서도 이제 캐시됩니다.

4. 기타 향상 및 버그 개선 사항

4-1. Keepalive timeout 개선

R34 이전에는 다른 클라이언트를 위해 연결을 재사용해야 하거나 작업자가 정상적으로 종료될 때 연결을 닫을 수 있었습니다.

NGINX Plus R34에서는 새로운 지시문 keepalive_min_timeout이 도입됩니다. 이 지시문은 연결 재사용 또는 작업자 정상 종료시 NGINX가 keepliave 연결을 종료하지 않는 시간 제한을 설정합니다. 이 변경을 통해 동일한 연결을 통해 여러 요청을 지연 없이 또는 요청 간에 약간의 지연을 두고 전송하는 클라이언트는 네트워크상의 이유나 작업자가 종료가 아닌 경우 그 중 하나에 대한 응답으로 TCP RST를 수신하지 않을 수 있습니다.

부수적으로, 이 프로토콜은 RFC 9112, 섹션 9.6에 설명된 마지막으로 전송된 HTTP 응답이 후속 TCP RST에 의해 손상될 수 있는 TCP 리셋 문제도 해결합니다. 이는 클라이언트가 재시도할 수 없는 비무력 요청에 중요합니다.

그러나 worker process 종료 시 추가 지연이 발생할 수 있고 NGINX의 효과적인 연결 재사용을 제한할 수 있으므로 keepalive_min_timeout을 큰 값으로 설정하지 않는 것이 좋습니다.

4-2. 향상된 Health Check Logging

NGINX Plus R34는 업스트림 health check 실패 문제를 해결하는 동안 더 나은 가시성을 위해 오류 로그에 로깅 기능을 추가했습니다. 이제 health check 실패 시 server status code가 기록됩니다.

4-3. Session Key 크기 증가

R34 이전에는 최대 4k(4096) bytes의 SSL 세션을 허용했습니다. NGINX Plus R34 에서는 세션이 4k bytes보다 클 수 있는 사용 사례를 수용하기 위해 최대 세션 크기가 8k(8192) bytes로 증가했습니다. 예를 들어 클라이언트 인증서가 세션에 저장되는 경우, 시템(TLS v1.2 또는 이전 버전의 경우) 또는 상태 비저장 티켓(TLS v.13의 경우)의 경우 세션 크기가 눈에 띄게 커질 수 있습니다. 특정 상태 비정상 세션 재개 구현은 추가 데이터도 저장할 수 있습니다.

그러한 경우 중 하나는 JDK의 경우인데, 이 경우 세션 티켓 데이터에 서버 인증서가 포함되어 디코딩된 세션 크기가 약 두 배로 들어나는 것으로 알려져 있습니다.

또한 크기 때문에 세션이 공유 메모리에 저장되지 않는 경우를 캡처하기 위해 로깅이 개선되었습니다.

5. Open Telemetry 모듈의 변경 사항

OTEL traces에서 TLS 지원:

이제 NGINX에서 OTEL traces를 전송할 때 TLS를 활성화할 수 있습니다. 다음과 같이 엔드포인트에 ‘https’ 체계를 지정하여 활성화할 수 있습니다.

otel_exporter { endpoint “https://otel.labt.fp.f5net.com:4433”; trusted_certificate “path/to/custom/ca/bundle”; # 선택 사항 }

기본적으로 시스템 CA 번들은 엔드포인트의 인증서를 확인하는 데 사용되며, 필요한 경우 “trusted_certificate” 지시문으로 재정의할 수 있습니다.

6. NGINX Open Source에서 상속된 변경 사항

NGINX Plus R34는 NGINX mainline을 기반으로 하며 NGINX Plus R33 출시 이후 이루어진 모든 기능 변셩, 기능 및 버그 수정을 상속합니다(NGINX Open Source 1.27.3 및 1.27.4 mainline)

Features:

  • SSL 인증서 캐싱
  • “keepalive_min_timeout” 지시문
  • “upstream” 블록의 ‘server’ 지시문은 ‘resolve’ 매개 변수를 지원합니다.
  • “upstream” 블록의 ‘resolver’ 및 ‘resolver_timeout’ 지시문.
  • Mail proxy 모듈에서 태그가 지정되지 않은 용량 응답이 있는 IMAP 로그인을 위한 SmarterMail 특정 모드 지원.

Changes:

  • 이제 TLSv1 및 TLSv1.1 프로토콜은 기본적으로 비활성화됩니다.
  • 대괄호 안의 IPv6 주소와 포트는 “proxy_bind”, “fastcgi_bind”, “grpc_bind”, “memcached_bind”, “scgi_bind”, uwsgi_bin” 지시문에 지정할 수 있고 ngx_http_realip_module의 클라이언트 주소로 지정할 수 있습니다.

Bug Fixes:

  • “gzip 필터가 미리 할당된 메모리를 사용하지 못했습니다.”라는 경고가 로그에 나타납니다.
  • –with-libatomic=DIR 옵션을 사용하면 NGINX가 라이브러리 소스를 사용하여 Libaltomic 라이브러리를 빌드할 수 있습니다.
  • 0-RTT를 사용할 때 QUIC 연결이 설정되지 않을 수 있습니다. 이 버그는 1.27.1에서 나타났습니다.
  • NGINX는 이제 클라이언트의 QUIC 버전 협상 패킷을 무시합니다.
  • Solaris 10 이하에서는 ngx_http_v3_module로 NGINX를 빌드할 수 없습니다.
  • HTTP/3의 버그 수정.
  • ngx_http_mp4_module의 버그 수정.
  • “listen” 지시문의 “so_keepalive” 매개변수가 DragonFly BSD에서 잘못 처리될 수 있습니다.
  • proxy_store 지시문의 버그 수정.

Security:

TLSv1.3 SNI로 처리하는 가상 서버의 불충분한 검사로 인해 다른 가상 서버에서 SSL 세션을 재사용하여 클라이언트 SSL 인증서 확인을 우회할 수 있음(CVE-2025-23419)

최근 상속된 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록은 NGINX 변경 사항을 참조하세요.

7. NGINX JavaScript 모듈 변경 사항

NGINX Plus R34에는 NGINX JavaScript(njs) 모듈 버전 0.8.9의 변경 사항이 통합되어 있습니다. 다음은 0.8.7(NGINX Plus R33과 함께 제공된 버전) 이후 njs의 주목할 만한 변경 사항 목록입니다.

Features:

  • QuickJS 엔진용 fs 모듈이 추가되었습니다.
  • QuickJS 엔진용 프로세스 객체를 구현했습니다.
  • process.kill() 메서드 구현.

Bug Fixes:

  • 서버당 추가 VM 생성을 제거했습니다. 이전에는 http 또는 stream 블록에서 js_import를 선언하면 각 서버 블록에 대해 VM 인스턴스의 추가 복사본이 생성되었습니다. 이는 서버 블록이 많은 구성의 경우 불필요하고 많은 메모리를 소모했습니다. 이 문제는 9b674412(0.8.6)에서 도입되었으며 685b64f0(0.8.7)에서 location 블록에 대해서만 부분적으로 수정되었습니다.
  • libxml2 2.13 이상에서 XML 테스트가 수정되었습니다.
  • promise가 상속될 때 promise 확인을 수정했습니다.
  • 복제된 VM에서 절대 범위를 수정했습니다.
  • 정격 출력 제한을 수정했습니다.
  • js_fetch_trusted_certificate 지시문에 대한 SSL 지시문 사용을 최적화했습니다.

모든 기능, 변경 사항 및 버그 수정에 대한 전체 목록은 njs change log를 참조하세요.

NGINX 상업용 버전을 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required