NGINX 플러스 R32 발표

관리자
2024-05-31
조회수 25

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


  • SSL 인증서 캐싱 - NGINX Plus R32는 SSL 인증서/키 쌍이 반복되는 위치가 많은 구성의 경우 NGINX 시작 시간 및 메모리 사용량이 크게 향상되었습니다.
  • Stream_pass 모듈 - NGINX Plus R32에서는 이제 스트림 모듈이 라우터 역할을 하여 연결이 스트림 모듈에서 http, 메일과 같은 다른 모듈로 조건부로 전달되거나 다시 스트림 자체로 전달될 수 있습니다.
  • NGINX Plus 공식 컨테이너 이미지 - NGINX Plus R32에서는 권한이 있는 컨테이너 런타임과 권한이 없는 컨테이너 런타임 모두에 대한 공식 NGINX Plus 컨테이너 이미지를 사용할 수 있습니다. 또한 두 배포 방법 모두 NGINX 관리 플레인 솔루션과의 원활한 통합을 가능하게 하는 동반 데몬인 NGINX 에이전트를 포함하는 선택적 컨테이너 이미지와 함께 제공됩니다.



행동의 중요한 변화

참고: NGINX Plus R31 이외의 릴리스에서 업그레이드하는 경우 현재 버전과 이 버전 사이의 모든 릴리스에 대한 이전 공지 블로그 의 동작의 중요한 변경 사항 섹션을 확인하세요 .

OpenTracing 모듈 지원 중단

NGINX Plus R18에 도입된 OpenTracing 모듈은 더 이상 사용되지 않으며 NGINX Plus R34에서 제거되도록 표시됩니다. 그때까지 모든 NGINX Plus 릴리스에서 관련 패키지를 사용할 수 있습니다. OpenTracing 모듈의 사용을 NGINX Plus R29 에 도입된 OpenTelemetry 모듈 로 교체하는 것이 좋습니다 .

ModSecurity 모듈 제거

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

PGP 키 업데이트

NGINX 오픈 소스 및 NGINX Plus 패키지는 PGP 키를 사용하여 서명됩니다. 이 키는 2024년 6월 16일에 만료되도록 설정되어 있습니다. 2024년 6월 16일 이후에도 기존 패키지를 계속 확인할 수 있도록 키 만료 날짜를 업데이트했습니다. 향후 릴리스에 대한 패키지에 서명하기 위해 새 키 쌍을 생성할 예정입니다.

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

우분투/데비안:

wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /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에 새로운 구성 계층을 추가하는 NGINX 오픈 소스 1.25.5 의 기능을 상속합니다 . 특히, NGINX 스트림 모듈은 이제 라우터로 작동하여 스트림 컨텍스트에서 http, 메일과 같은 다른 컨텍스트로 연결을 전달하거나 스트림 컨텍스트 자체 내의 별도의 가상 서버로 연결을 전달하는 기능을 갖춘 프록시 역할을 할 수 있습니다.

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

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

다음 구성 조각은 스트림 모듈에서 SSL 연결을 종료하고 요청된 서버 이름에 따라 조건에 따라 http 컨텍스트 또는 스트림 컨텍스트의 다른 가상 서버에 연결을 전달합니다.

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 연결이 스트림 서버 블록에서 종료됩니다. 들어오는 요청의 서버 이름에 따라 연결은 포트 8000에서 수신하는 http 서버 또는 포트 9001에서 수신하는 스트림 가상 서버로 전달됩니다.

모듈의 또 다른 응용 프로그램은 타사 모듈이 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 연결이 스트림 서버 블록에서 종료되고 rtmp로 전달됩니다. 연결은 RTMP 모듈에 대해 암호화되지 않은 것으로 나타나므로 SSL 연결을 지원하기 위해 추가적인 사용자 정의 또는 처리 오버헤드가 필요하지 않습니다.

NGINX Plus 컨테이너 이미지

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



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_module.
  • 스트림 모듈에 있는 "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의 변경 사항이 통합되어 있습니다. 다음은 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 값에 대한 날짜 생성자를 수정했습니다.
  • 버그 수정: querystring.parse()의 언더플로를 수정했습니다.
  • 버그픽스: String.prototype.match()의 잠재적인 버퍼 오버로드를 수정했습니다.
  • 버그 수정: for-in 루프 구문 분석을 수정했습니다.
  • 버그수정: 숫자가 없는 16진수, 8진수, 2진수 리터럴의 구문 분석을 수정했습니다.
  • 버그픽스: 0.8.3 에 도입된 시간 제한 없이 공유 사전의 clear() 메소드를 수정했습니다 .
  • 버그픽스: Buffer 인수로 시간 초과가 없는 공유 사전의 r.send() 메소드를 수정했습니다.
  • 버그 수정: 패딩되지 않은 base64 문자열이 있는 atob()을 수정했습니다.


모든 기능, 변경 사항 및 버그 수정의 전체 목록을 보려면 njs 변경 로그를 참조하세요 .

0

㈜시큐웨이브 | 서울시 서초구 매헌로 16 하이브랜드 빌딩 4F | 사업자등록번호 : 264-81-09394

대표번호 : 02-3404-5757 | 팩스 : 02-3404-5778 | E-mail : sales@secuwave.co.kr


COPYRIGHT © 2024 NGINXKOREA CO,. LTD. ALL RIGHTS RESERVED.