블로그 | NGINX

NGINX Plus R32 발표

NGINX-F5-수평-검정-유형-RGB의 일부
프라바트 딕시트 썸네일
프라바트 딕시트
2024년 5월 28일 게시

NGINX Plus 릴리스 32(R32) 출시 소식을 알려드리게 되어 기쁩니다. NGINX 오픈 소스를 기반으로 하는 NGINX Plus는 유일한 올인원 소프트웨어 웹 서버, 로드 밸런서, 역방향 프록시, 콘텐츠 캐시 및 API 게이트웨이입니다.

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

  • SSL 인증서 캐싱 - NGINX Plus R32는 반복되는 SSL 인증서/키 쌍이 있는 많은 수의 위치가 있는 구성의 경우 NGINX 시작 시간과 메모리 사용량을 크게 개선합니다.
  • Stream_pass 모듈 - NGINX Plus R32에서는 이제 스트림 모듈이 라우터 역할을 하여 연결이 스트림 모듈에서 다른 모듈(예: http, 메일)로 조건부로 전달되거나 스트림 자체로 다시 전달될 수 있습니다.
  • 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 릴리스에서는 관련 패키지가 제공될 예정입니다. NGINX Plus R29 에서 도입된 OpenTelemetry 모듈 로 OpenTracing 모듈 사용을 대체할 것을 적극 권장합니다.

ModSecurity 모듈 제거

ModSecurity 모듈은 2024년 3월 31일에 지원이 종료되었습니다. 결과적으로, modsec 패키지는 NGINX Plus 저장소에서 제거되었으며 앞으로 NGINX Plus 저장소에서 더 이상 사용할 수 없게 됩니다.

PGP 키 업데이트

NGINX 오픈 소스 및 NGINX Plus 패키지는 PGP 키를 사용하여 서명됩니다. 이 키는 2024년 6월 16일에 만료됩니다. 기존 패키지가 2024년 6월 16일 이후에도 계속 검증될 수 있도록 키의 만료 날짜를 업데이트했습니다. 우리는 다가올 릴리스에 대한 패키지에 서명하기 위해 새로운 키 쌍을 생성할 것입니다.

모든 NGINX 사용자는 다음 단계에 따라 업데이트된 PGP 키를 다운로드하여 설치해야 합니다.

Ubuntu/Debian의 경우:

wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --친애하는 | sudo 티 /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

RHEL/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를 설치하는 경우, 패키지 관리자가 종속 라이브러리 및 패키지를 업데이트하라고 제안할 수 있습니다.

플랫폼 지원 변경

이 릴리스에서는 지원되는 플랫폼에 다음과 같은 변경 사항이 적용되었습니다.

지원되는 새로운 운영 체제:

  • 우분투 24.04

제거된 이전 운영 체제:

  • 2023년 12월 31일에 EOL에 도달한 FreeBSD 12

NGINX Plus R33에서 더 이상 지원되지 않고 제거될 예정인 이전 운영 체제:

  • CentOS7/RHEL7/오라클 리눅스 7
  • 알파인 리눅스 3.16

새로운 기능에 대한 자세한 정보

NGINX 로드 동작을 개선하기 위한 SSL 인증서 캐싱

이전에는 NGINX가 NGINX 구성에서 참조될 때마다 인증서, 키 또는 인증서 해지 목록을 로드했습니다. 즉, 같은 객체에 대한 여러 참조가 있으면 해당 객체가 다시 로드되는 횟수도 같아집니다. 이러한 지연은 신뢰할 수 있는 인증서 목록과 같은 지침을 상속하는 경우 더욱 심화됩니다. 특정 조건에서 이러한 동작은 NGINX 시작 시간에 상당한 영향을 미치고 구성을 저장하기 위해 많은 양의 메모리가 필요할 수 있습니다.

새로운 동작에 따라 SSL 지시문은 이제 캐시된 인증서 파일과 관련 개체를 참조합니다. 그 결과, 동일한 인증서 객체를 반복적으로 참조하는 구성에 대한 메모리 사용량과 로드 시간이 크게 줄어듭니다. 이러한 이점은 신뢰할 수 있는 인증서의 소수가 많은 수의 위치 블록에 참조되는 대규모 NGINX 구성에서 가장 분명하게 드러납니다.

NGINX가 약 5400개의 위치 블록(최상위 및 중첩)과 878개의 인증서로 구성되어 로드 시간이 개선된 모습을 시각화한 것입니다.

로드 시간 개선

그래프의 오른쪽으로 갈수록 로드 시간이 크게 줄어드는 점에 주목하세요. 평균 로드 시간이 변경 전에는 약 40초였지만, 새로운 동작에서는 약 6초로 줄었습니다.

스트림 모듈에서 다른 모듈로 연결 전달

NGINX Plus R32는 NGINX 오픈 소스 1.25.5 의 기능을 상속받아 NGINX에 새로운 구성 계층을 추가합니다. 구체적으로, NGINX 스트림 모듈은 이제 라우터로 작동하여 스트림 컨텍스트에서 http, 메일 또는 스트림 컨텍스트 자체 내의 별도 가상 서버와 같은 다른 컨텍스트로 연결을 전달하는 기능을 갖춘 프록시 역할을 할 수 있습니다.

이 기능은 이번 릴리스에서 도입된 ngx_stream_pass_module 모듈 의 일부로 사용할 수 있습니다. 모듈에는 클라이언트 연결을 전달할 주소를 지정하는 데 사용할 수 있는 단일 지시어 "pass"가 있습니다. 주소는 IP 주소와 포트 조합, 소켓 경로로 지정하거나 NGINX 변수로 참조할 수 있습니다.

이 기능을 사용하면 모든 트래픽을 단일 L4 엔드포인트를 통해 실행하려는 고객은 이제 L4 스트림 컨텍스트에서 SSL 연결을 종료하고 이를 스트림 컨텍스트 내의 다른 모듈(http, 메일)이나 다른 가상 서버로 전달할 수 있습니다. 또한 SSL 연결은 서버 이름이나 프로토콜에 따라 조건부로 종료될 수 있으며, 나머지 트래픽은 다른 곳으로 프록시될 수 있습니다. 이를 통해 단일 엔드포인트에서 트래픽을 관리하기 위한 새로운 구성 동작 세트가 가능해졌습니다.

다음 구성 스니펫은 스트림 모듈에서 SSL 연결을 종료하고 요청된 서버 이름을 기반으로 스트림 컨텍스트 내의 http 컨텍스트나 다른 가상 서버에 조건부로 전달합니다.

http {
서버 {
8000을 수신;

위치 / {
200을 반환합니다 foo;
}
}
}

스트림 {
맵 $ssl_server_name $pass_port {
foo.example.com 8000;
기본 9001;

}

서버 {
9000을 수신;

ssl_certificate 도메인.crt;
ssl_certificate_key 도메인.key;

패스 127.0.0.1:$pass_port;
}
서버{
9001을 수신;
리턴 bar\n;
}

}

이 예에서 모든 SSL 연결은 스트림 서버 블록에서 종료됩니다. 수신 요청에 포함된 서버 이름에 따라 연결은 포트 8000에서 수신하는 http 서버로 전달되거나 포트 9001에서 수신하는 스트림 가상 서버로 전달됩니다.

모듈의 또 다른 응용 분야는 타사 모듈이 SSL 종료를 지원하지 않는 사용 사례를 처리합니다. 이러한 시나리오에서 stream_pass 모듈은 타사 모듈에 전달하기 전에 TLS 암호화 연결을 종료할 수 있습니다.

이 예제는 기본적으로 SSL을 지원하지 않는 RTMP 모듈 이 stream_pass 모듈을 사용하여 TLS 암호화 트래픽을 허용하는 방법을 보여줍니다.

rtmp {
서버 {
듣기 1935;#rtmp

애플리케이션 foo{

라이브 온;
}
}
}

스트림 {
서버 {
듣기 1936 ssl; #rtmps

ssl_certificate 도메인.crt;
ssl_certificate_key 도메인.key;

패스 127.0.0.1:1935;
}
}

이 구성 스니펫에서는 SSL 연결이 스트림 서버 블록에서 종료되고 rtmp로 전달됩니다. SSL 연결을 지원하기 위한 추가적인 사용자 정의나 처리 오버헤드가 필요 없기 때문에 RTMP 모듈에 연결이 암호화되지 않은 것으로 나타납니다.

NGINX Plus 컨테이너 이미지

NGINX Plus R32에는 NGINX Plus의 특권 실행과 특권 없는 실행을 위한 NGINX Plus 컨테이너 이미지가 공식적으로 제공됩니다. 두 가지 컨테이너 유형 모두 NGINX 에이전트를 선택적으로 설치하여 NGINX 지원 관리 평면에 쉽게 연결할 수 있습니다. 이미지는 private-registry.nginx.com에서 제공되는 NGINX 레지스트리에서 다운로드할 수 있습니다. NGINX Plus 인증서와 키 또는 JSON 웹 토큰(JWT)을 사용하여 이미지에 액세스하려면 다음 지침을 따르세요.

NGINX Plus R32의 기타 개선 사항 및 버그 수정

MQTT 모듈의 버그 수정

  • 기본 속성을 사용할 때 잘못된 패킷이 발생합니다. 이 릴리스에는 NGINX Plus R29에서 도입된 MQTT( Message Queuing Telemetry Transport ) 모듈에서 잘못된 패킷으로 이어지는 문제에 대한 수정 사항이 포함되어 있습니다. 이전에는 속성 필드가 존재하고 MQTT Connect 메시지의 모든 속성에 대한 기본값을 포함하고 있었을 때, 나가는 패킷의 길이는 속성 길이 필드(1바이트)를 고려하지 않았습니다. 이로 인해 패킷 길이가 예상보다 1바이트 적어지고 잘못된 패킷이 생성되었습니다. R32의 이 수정 사항은 해당 문제를 해결합니다.

zone_sync 모듈의 버그 수정

  • 구성 재로드 시 메모리 누수: 이전에는 보류 중인 대기열 동기화 작업에서 해제되지 않은 별도의 풀에서 할당된 체인 링크를 사용했습니다. 이로 인해 마스터 프로세스뿐만 아니라 모든 작업자 프로세스에서도 메모리 누수가 발생했습니다. 이번 릴리스의 수정 사항은 보류 중인 대기열에 대해 사이클 풀을 사용하는 이전의 영역 동기화 구현으로 돌아갑니다.

보안 수정

다음과 같은 잠재적인 보안 문제가 실험적 HTTP3/QUIC 구현에서 확인되어 수정되었습니다.

  • 쓰기가 포함된 힙 오버플로( CVE-2024-32760 ): 공개되지 않은 HTTP/3 인코더 지침으로 인해 NGINX 작업자 프로세스가 종료되거나 다른 가능한 영향이 발생할 수 있습니다.
  • 스택 오버플로/해제 후 사용( CVE-2024-31079 ): 공개되지 않은 HTTP/3 요청으로 인해 NGINX 작업자 프로세스가 종료되거나 다른 영향이 발생할 수 있습니다. 이 공격을 실행하려면 요청이 연결 드레이닝 프로세스 중에 특정 시간에 이루어져야 하는데, 공격자는 이를 볼 수 없고 영향력도 제한적입니다.
  • 빈 헤더가 있는 Null 포인터 역참조( CVE-2024-35200 ): 공개되지 않은 HTTP/3 요청으로 인해 NGINX 작업자 프로세스가 종료되거나 다른 영향이 발생할 수 있습니다.
  • QUIC 핸드셰이크 중 메모리 공개( CVE-2024-34161 ): 네트워크 인프라가 단편화 없이 4096 이상의 최대 전송 단위(MTU)를 지원하는 경우 공개되지 않은 QUIC 메시지로 인해 NGINX 작업자 프로세스가 종료되거나 이전에 해제된 메모리 누출이 발생할 수 있습니다.

NGINX 오픈 소스에서 상속된 변경 사항

NGINX Plus R32는 NGINX Open Source 1.25.5를 기반으로 하며 NGINX Plus R31이 출시된 이후(NGINX 1.25.4 및 1.25.5) 기능 변경, 특징 및 버그 수정을 계승했습니다.

특징:

  • 스트림 모듈의 가상 서버.
  • ngx_stream_pass_모듈.
  • 스트림 모듈의 "listen" 지시문의 "deferred", "accept_filter" 및 "setfib" 매개변수.
  • 일부 아키텍처에 대한 캐시 라인 크기 감지.
  • Apple Silicon에서 Homebrew 지원.

버그 수정:

  • Windows 교차 컴파일 버그 수정 및 개선.
  • QUIC에서 0-RTT를 사용하는 동안 예기치 않은 연결이 종료되었습니다.
  • 보류 중인 AIO 작업과의 연결은 이전 작업자 프로세스를 정상적으로 종료하는 동안 조기에 닫힐 수 있습니다.
  • 오래된 작업자 프로세스를 정상적으로 종료한 후 빠른 종료를 요청하면 소켓 누수 경고가 더 이상 기록되지 않습니다.
  • 하위 요청에서 AIO가 사용된 경우 소켓 설명자 오류, 소켓 누수 또는 작업자 프로세스(SSL 프록싱의 경우)의 세그먼테이션 오류가 발생할 수 있습니다.
  • "image_filter" 지시어와 함께 SSL 프록싱을 사용하고 코드 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의 변경 사항을 통합합니다. 다음은 0.8.2(NGINX Plus R31과 함께 제공된 버전) 이후 njs에서 변경된 주요 내용 목록입니다.

특징

  • 기능: 발신 헤더에 대한 서버 헤더를 설정할 수 있습니다.
  • 특징: CLI에서 QuickJS 엔진 지원.

변화

  • 개선 사항: r.subrequest()에서 URI 및 args 인수의 유효성 검사.
  • 개선 사항: 중복된 js_set 변수를 확인합니다.

버그 수정

  • 버그 수정: Headers.set()이 수정되었습니다.
  • 버그 수정: 버퍼 값으로 js_set을 수정했습니다.
  • 버그 수정: 시간 제한이 지정되지 않은 경우 공유 사전의 clear() 메서드가 수정되었습니다.
  • 버그 수정: js_periodic이 활성화되었을 때 stub_status 통계가 수정되었습니다.
  • 버그 수정: libxml2 2.12 이상을 사용해 빌드하는 문제를 수정했습니다.
  • 버그 수정: 오버플로 및 NaN 값을 사용하는 Date 생성자를 수정했습니다.
  • 버그 수정: querystring.parse()의 언더플로우를 수정했습니다.
  • 버그 수정: String.prototype.match()에서 버퍼 오버리드가 발생할 가능성을 수정했습니다.
  • 버그 수정: for-in 루프의 구문 분석이 수정되었습니다.
  • 버그 수정: 숫자가 없는 16진수, 8진수, 2진수 리터럴의 구문 분석을 수정했습니다.
  • 버그 수정: 시간 초과 없이 공유 사전의 clear() 메서드가 수정되었습니다.0.8.3 .
  • 버그 수정: Buffer 인수에 타임아웃 없이 공유 사전의 r.send() 메서드를 수정했습니다.
  • 버그 수정: 패딩되지 않은 base64 문자열을 사용하는 atob()를 수정했습니다.

모든 기능, 변경 사항 및 버그 수정의 포괄적인 목록은 njs 변경 로그를 참조하세요.

업그레이드 또는 NGINX Plus를 사용해 보세요

NGINX Plus를 실행 중이라면 가능한 한 빨리 NGINX Plus R32로 업그레이드하는 것을 적극 권장합니다. 모든 훌륭한 새로운 기능 외에도 여러 가지 추가 수정 사항과 개선 사항을 얻을 수 있으므로 지원 티켓을 제출해야 하는 경우 NGINX에서 도움을 더 쉽게 받을 수 있습니다.

NGINX Plus 사용자가 아니라면, 한번 사용해보시기 바랍니다. 보안, 부하 분산 및 API 게이트웨이 사용 사례에 사용하거나 향상된 모니터링 및 관리 API를 갖춘 완벽히 지원되는 웹 서버로 사용할 수 있습니다. 오늘 무료 30일 체험판을 시작해 보세요.


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."