NGINX Plus 릴리스 32(R32)를 사용할 수 있게 되었음을 기쁜 마음으로 알려드립니다. NGINX Open Source를 기반으로 하는 NGINX Plus는 소프트웨어 웹 서버, 로드 밸런서, 리버스 프록시, 콘텐츠 캐시 및 API 게이트웨이를 모두 제공하는 유일한 올인원 솔루션입니다.
NGINX Plus R32의 새로운 기능과 향상된 기능은 다음과 같습니다:
- SSL 인증서 캐싱 — NGINX Plus R32에서는 동일한 SSL 인증서/키 쌍을 반복해서 사용하는 로케이션이 많은 구성의 경우 NGINX 시작 시간과 메모리 사용량이 크게 개선되었습니다.
- Stream_pass 모듈 — NGINX Plus R32에서는 이제 stream 모듈을 라우터로 사용할 수 있어, 연결을 조건에 따라 stream 모듈에서 http, mail 등의 다른 모듈이나 stream 모듈 자체로 다시 전달할 수 있습니다.
- NGINX Plus 공식 컨테이너 이미지 — NGINX Plus R32에서는 권한 있는 컨테이너 런타임과 권한 없는 컨테이너 런타임 모두를 위한 공식 NGINX Plus 컨테이너 이미지를 사용할 수 있습니다. 또한 두 배포 방식 모두 NGINX 관리 플레인 솔루션과 원활하게 통합할 수 있도록 지원하는 보조 데몬인 NGINX Agent가 포함된 선택적 컨테이너 이미지를 제공합니다.
이번 릴리스에는 NGINX 오픈 소스에서 이어받은 새로운 기능과 버그 수정 사항, 그리고 NGINX JavaScript 모듈 업데이트도 포함됩니다.
중요한 동작 변경 사항
참고: NGINX Plus R31 이외의 릴리스에서 업그레이드하는 경우, 현재 버전과 이 버전 사이에 출시된 모든 릴리스에 대해 중요한 동작 변경 사항 섹션을 이전 릴리스 발표 블로그에서 반드시 확인하세요.
OpenTracing 모듈 지원 중단
NGINX Plus R18에서 도입된 OpenTracing 모듈은 더 이상 사용되지 않으며 NGINX Plus R34에서 제거될 예정입니다. 관련 패키지는 그때까지 모든 NGINX Plus 릴리스에서 제공됩니다. OpenTracing 모듈 대신 OpenTelemetry 모듈을 사용할 것을 강력히 권장합니다. 이 모듈은 NGINX Plus R29에서 도입되었습니다.
ModSecurity 모듈 제거
ModSecurity 모듈에 대한 지원은 2024년 3월 31일에 종료되었습니다. 이에 따라 modsec 패키지가 NGINX Plus 리포지토리에서 제거되었으며, 앞으로 더 이상 NGINX Plus 리포지토리에서 제공되지 않습니다.
PGP 키 업데이트
NGINX Open Source 및 NGINX Plus 패키지는 PGP 키를 사용하여 서명됩니다. 이 키는 2024년 6월 16일에 만료될 예정입니다. 기존 패키지를 2024년 6월 16일 이후에도 계속 검증할 수 있도록 키의 만료일을 갱신했습니다. 향후 릴리스의 패키지 서명에는 새로 생성한 키 쌍을 사용할 예정입니다.
모든 NGINX 사용자는 다음 단계에 따라 업데이트된 PGP 키를 다운로드하고 설치해야 합니다:
Ubuntu/Debian의 경우:
wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/nullRHEL/CentOS의 경우:
sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.key키를 업데이트하기 전까지는 2024년 6월 16일 이후 소프트웨어 서명을 확인할 수 없습니다.
향후 패키징 및 릴리스 정책
향후 NGINX Plus 릴리스에서는 패키징 및 릴리스 정책을 간소화할 예정입니다. NGINX Plus는 지원되는 운영 체제 배포판의 최신 버전에서만 빌드 및 테스트됩니다. 이전 버전의 배포판에 NGINX Plus를 설치하는 경우 패키지 관리자가 종속 라이브러리와 패키지를 업데이트하도록 제안할 수 있습니다.
플랫폼 지원 변경 사항
이번 릴리스에서는 지원되는 플랫폼이 다음과 같이 변경되었습니다.
새로 지원되는 운영 체제:
- Ubuntu 24.04
이전 운영 체제 지원 종료:
- 2023년 12월 31일에 지원이 종료된 FreeBSD 12
지원 중단되었으며 NGINX Plus R33에서 제거될 예정인 이전 운영 체제:
- CentOS7/RHEL7/Oracle Linux 7
- Alpine Linux 3.16
새로운 기능 상세 설명
NGINX 부하 동작 개선을 위한 SSL 인증서 캐싱
이전에는 NGINX 구성에서 인증서, 키 또는 인증서 해지 목록이 참조될 때마다 NGINX가 해당 항목을 로드했습니다. 따라서 동일한 객체를 여러 번 참조하면 참조 횟수만큼 해당 객체를 다시 로드해야 했습니다. 신뢰할 수 있는 인증서 목록과 같은 지시문을 상속할 때는 이러한 지연이 누적되었습니다. 특정 조건에서는 이 동작이 NGINX 시작 시간에 상당한 영향을 미치고 구성을 저장하는 데 많은 메모리가 필요할 수 있었습니다.
새로운 동작 방식에서는 이제 SSL 지시문이 캐시된 인증서 파일 및 관련 객체를 참조합니다. 그 결과, 동일한 인증서 객체를 반복해서 참조하는 구성의 메모리 사용량과 로드 시간이 크게 줄어듭니다. 이러한 이점은 소수의 신뢰할 수 있는 인증서를 다수의 location 블록에서 참조하는 대규모 NGINX 구성에서 가장 두드러집니다.
다음은 NGINX에 약 5,400개의 location 블록(최상위 및 중첩 블록)과 878개의 인증서를 구성했을 때 로드 시간이 얼마나 개선되는지를 시각화한 것입니다.

그래프 오른쪽에서 로드 시간이 크게 감소한 것을 확인할 수 있습니다. 평균 로드 시간이 변경 전 약 40초에서 새로운 동작 방식에서는 약 6초로 줄었습니다.
스트림 모듈의 연결을 다른 모듈로 전달
NGINX Plus R32에는 NGINX 오픈 소스 1.25.5에서 도입된 기능이 포함되어 NGINX의 구성 유연성이 한층 향상되었습니다. 구체적으로 이제 NGINX stream 모듈은 라우터로 작동할 수 있으며, 프록시 역할을 하면서 stream 컨텍스트의 연결을 http, mail 등의 다른 컨텍스트나 stream 컨텍스트 자체 내의 별도 가상 서버로 전달할 수 있습니다.
이 기능은 이번 릴리스에서 도입된 ngx_stream_pass_module 모듈의 일부로 제공됩니다. 이 모듈에는 클라이언트 연결을 전달할 주소를 지정하는 데 사용할 수 있는 단일 지시어인 “pass”가 있습니다. 주소는 IP 주소와 포트의 조합이나 소켓 경로로 지정하거나 NGINX 변수를 통해 참조할 수 있습니다.
이 기능을 사용하면 모든 트래픽을 단일 L4 엔드포인트를 통해 처리하려는 고객은 이제 L4 스트림 컨텍스트에서 SSL 연결을 종료한 후 다른 모듈(http, mail)이나 스트림 컨텍스트 내의 다른 가상 서버로 전달할 수 있습니다. 또한 서버 이름이나 프로토콜에 따라 SSL 연결을 조건부로 종료하고, 나머지 트래픽은 다른 위치로 프록시할 수 있습니다. 이를 통해 단일 엔드포인트에서 트래픽을 관리할 수 있는 새로운 구성 방식이 가능해집니다.
다음 구성 스니펫은 stream 모듈에서 SSL 연결을 종료하고, 요청된 서버 이름에 따라 해당 연결을 http 컨텍스트 또는 stream 컨텍스트의 다른 가상 서버로 조건부 전달합니다.
http {
server {
listen 8000;
location / {
return 200 foo;
}
}
}
stream {
map $ssl_server_name $pass_port {
foo.example.com 8000;
default 9001;
}
server {
listen 9000 ssl;
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:$pass_port;
}
server{
listen 9001;
return bar\n;
}
}이 예제에서는 모든 SSL 연결이 stream 서버 블록에서 종료됩니다. 수신 요청의 서버 이름에 따라 연결은 포트 8000에서 수신 대기 중인 http 서버 또는 포트 9001에서 수신 대기 중인 stream 가상 서버로 전달됩니다.
이 모듈은 타사 모듈이 SSL 종료를 지원하지 않는 사용 사례에도 활용할 수 있습니다. 이러한 경우 stream_pass 모듈은 TLS 암호화 연결을 종료한 후 타사 모듈로 전달할 수 있습니다.
이 예제에서는 기본적으로 SSL을 지원하지 않는 RTMP 모듈이 stream_pass 모듈을 사용하여 TLS로 암호화된 트래픽을 수신하는 방법을 보여줍니다.
rtmp {
server {
listen 1935;#rtmp
application foo{
live on;
}
}
}
stream {
server {
listen 1936 ssl; #rtmps
ssl_certificate domain.crt;
ssl_certificate_key domain.key;
pass 127.0.0.1:1935;
}
}이 구성 코드 조각에서는 SSL 연결이 stream 서버 블록에서 종료된 후 rtmp로 전달됩니다. RTMP 모듈에는 연결이 암호화되지 않은 상태로 표시되므로, SSL 연결을 지원하기 위한 추가 사용자 지정이나 처리 오버헤드가 필요하지 않습니다.
NGINX Plus 컨테이너 이미지
NGINX Plus R32에서는 권한 있는 모드와 권한 없는 모드 모두에서 NGINX Plus를 실행할 수 있는 공식 NGINX Plus 컨테이너 이미지를 제공합니다. 두 컨테이너 유형 모두 NGINX에서 지원하는 관리 플레인에 쉽게 연결할 수 있도록 NGINX Agent를 선택적으로 설치한 형태로도 제공됩니다. 이미지는 private-registry.nginx.com에서 제공되는 NGINX 레지스트리에서 다운로드할 수 있습니다. 다음 지침에 따라 NGINX Plus 인증서와 키 또는 JSON 웹 토큰(JWT)을 사용하여 이미지에 액세스하세요.
NGINX Plus R32의 기타 개선 사항 및 버그 수정
MQTT 모듈의 버그 수정
- 기본 속성 사용 시 잘못된 형식의 패킷: 이번 릴리스에는 메시지 큐 원격 측정 전송(MQTT) 모듈에서 잘못된 형식의 패킷이 생성되는 문제에 대한 수정 사항이 포함되어 있습니다. 이 문제는 NGINX Plus R29에서 도입되었습니다. 이전에는 MQTT Connect 메시지에 속성 필드가 있고 모든 속성이 기본값으로 설정된 경우, 송신 패킷의 길이를 계산할 때 속성 길이 필드(1바이트)가 반영되지 않았습니다. 이로 인해 패킷 길이가 예상보다 1바이트 짧아져 잘못된 형식의 패킷이 생성되었습니다. R32의 이번 수정으로 해당 문제가 해결되었습니다.
zone_sync 모듈의 버그 수정
- 구성 다시 로드 시 메모리 누수: 이전에는 대기열 동기화 작업에서 해제되지 않는 별도의 풀에 할당된 체인 링크를 사용했습니다. 이로 인해 마스터 프로세스와 모든 워커 프로세스에서 메모리 누수가 발생했습니다. 이번 릴리스에서는 대기열에 사이클 풀을 사용하는 이전 영역 동기화 구현으로 되돌려 이 문제를 해결했습니다.
보안 수정 사항
실험적 HTTP3/QUIC 구현에서 다음과 같은 잠재적 보안 문제가 확인되어 수정되었습니다.
- 쓰기 작업을 수반하는 힙 오버플로(CVE-2024-32760): 공개되지 않은 HTTP/3 인코더 명령으로 인해 NGINX 워커 프로세스가 종료되거나 기타 문제가 발생할 수 있습니다.
- 스택 오버플로/해제 후 사용 취약점(CVE-2024-31079): 공개되지 않은 HTTP/3 요청으로 인해 NGINX 워커 프로세스가 종료되거나 기타 문제가 발생할 수 있습니다. 이 공격이 성공하려면 연결 종료 처리 중 특정 시점에 요청을 보내야 하지만, 공격자는 해당 시점을 파악할 수 없으며 이에 미칠 수 있는 영향도 제한적입니다.
- 빈 헤더로 인한 널 포인터 역참조 (CVE-2024-35200): 공개되지 않은 HTTP/3 요청으로 인해 NGINX 워커 프로세스가 종료되거나 기타 문제가 발생할 수 있습니다.
- QUIC 핸드셰이크 중 메모리 노출 (CVE-2024-34161): 네트워크 인프라가 조각화 없이 4096 이상의 최대 전송 단위(MTU)를 지원하는 경우, 공개되지 않은 QUIC 메시지로 인해 NGINX 워커 프로세스가 종료되거나 이전에 해제된 메모리가 유출될 수 있습니다.
NGINX Open Source에서 상속된 변경 사항
NGINX Plus R32는 NGINX Open Source 1.25.5를 기반으로 하며, NGINX Plus R31 출시 이후 NGINX 1.25.4 및 1.25.5에 적용된 기능 변경 사항, 새로운 기능 및 버그 수정 사항을 포함합니다.
기능:
- 스트림 모듈의 가상 서버.
- ngx_stream_pass_module.
- stream 모듈의 "listen" 지시어에 사용되는 "deferred", "accept_filter", "setfib" 매개변수.
- 일부 아키텍처의 캐시 라인 크기 감지.
- Apple Silicon에서 Homebrew 지원.
버그 수정:
- Windows 크로스 컴파일 관련 버그 수정 및 개선.
- QUIC에서 0-RTT 사용 중 예기치 않은 연결 종료.
- 대기 중인 AIO 작업이 있는 연결은 이전 워커 프로세스가 정상 종료되는 동안 조기에 닫힐 수 있습니다.
- 이전 워커 프로세스의 정상 종료 후 빠른 종료가 요청된 경우 더 이상 소켓 누수 경고가 로그에 기록되지 않습니다.
- 하위 요청에서 AIO를 사용한 경우 워커 프로세스(SSL 프록시용)에서 소켓 디스크립터 오류, 소켓 누수 또는 세그멘테이션 오류가 발생할 수 있었습니다.
- SSL 프록시를 "image_filter" 지시어와 함께 사용하고 코드 415 오류를 "error_page" 지시어로 리디렉션한 경우 워커 프로세스에서 세그멘테이션 폴트가 발생할 수 있었습니다.
- HTTP/3의 버그 수정 및 개선.
보안:
- HTTP/3 사용 시 특수하게 조작된 QUIC 세션을 처리하는 동안 워커 프로세스에서 세그멘테이션 오류가 발생할 수 있습니다(CVE-2024-24989, CVE-2024-24990).
최근 릴리스에서 이어진 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록은 NGINX 변경 사항 파일을 참조하세요.
NGINX JavaScript 모듈 변경 사항
NGINX Plus R32에는 NGINX JavaScript(njs) 모듈 버전 0.8.4의 변경 사항이 반영되어 있습니다. 다음은 NGINX Plus R31에 포함되었던 버전인 0.8.2 이후 njs의 주요 변경 사항 목록입니다.
기능
- 기능: 발신 헤더의 Server 헤더를 설정할 수 있습니다.
- 기능: CLI에서 QuickJS 엔진을 지원합니다.
변경 사항
- 개선: r.subrequest()의 URI 및 args 인수에 대한 유효성 검사.
- 개선: 중복된 js_set 변수를 검사합니다.
버그 수정
- 버그 수정: Headers.set()을 수정했습니다.
- 버그 수정: Buffer 값을 사용할 때 발생하던 js_set 문제를 수정했습니다.
- 버그 수정: 시간 제한이 지정되지 않은 경우 공유 딕셔너리의 clear() 메서드가 올바르게 동작하도록 수정했습니다.
- 버그 수정: js_periodic이 활성화된 경우의 stub_status 통계 문제를 수정했습니다.
- 버그 수정: libxml2 2.12 이상 버전에서 발생하던 빌드 문제를 수정했습니다.
- 버그 수정: 오버플로 및 NaN 값에 대한 Date 생성자 문제를 수정했습니다.
- 버그 수정: querystring.parse()의 언더플로를 수정했습니다.
- 버그 수정: String.prototype.match()에서 발생할 수 있는 버퍼 초과 읽기 문제를 수정했습니다.
- 버그 수정: for-in 루프의 구문 분석 문제를 수정했습니다.
- 버그 수정: 숫자가 없는 16진수, 8진수 및 2진수 리터럴의 구문 분석 문제를 수정했습니다.
- 버그 수정: 0.8.3에서 도입된, 타임아웃이 없는 공유 딕셔너리의 clear() 메서드 문제를 수정했습니다.
- 버그 수정: 제한 시간이 없는 공유 딕셔너리에서 Buffer 인수를 사용할 때 발생하던 r.send() 메서드 문제를 수정했습니다.
- 버그 수정: 패딩되지 않은 base64 문자열에서 atob()가 올바르게 작동하도록 수정했습니다.
모든 기능, 변경 사항 및 버그 수정에 대한 전체 목록은 njs 변경 로그를 참조하세요.
NGINX Plus 업그레이드 또는 체험
NGINX Plus를 사용 중이라면 가능한 한 빨리 NGINX Plus R32로 업그레이드하시기를 적극 권장합니다. 뛰어난 새로운 기능뿐만 아니라 여러 추가 수정 사항과 개선 사항도 적용되어, 지원 티켓을 제출해야 할 때 NGINX가 더욱 원활하게 도움을 드릴 수 있습니다.
아직 NGINX Plus를 사용하고 있지 않다면 지금 바로 사용해 보시기 바랍니다. 보안, 로드 밸런싱, API 게이트웨이 용도로 활용하거나, 향상된 모니터링 및 관리 API를 제공하는 완전한 지원이 포함된 웹 서버로 사용할 수 있습니다. 지금 바로 30일 무료 평가판으로 시작해 보세요.
관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.