블로그 | NGINX

NGINX Plus R30 발표

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

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

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

  • QUIC+HTTP/3에 대한 기본 지원 NGINX Plus는 이제 HTTP/3에 대한 공식 지원을 제공합니다. 이 구현은 QUIC 프로토콜을 통한 HTTP/3 지원을 제공하는 데 필요한 누락된 OpenSSL TLS 기능을 제공하기 위해 타사 라이브러리에 의존하지 않습니다. NGINX 팀에서 개발한 OpenSSL 호환성 계층을 사용하여 OpenSSL에서 지원하지 않는 QUIC TLS 인터페이스의 문제점을 해결합니다.
  • 작업자별 연결 원격 측정 이제 작업자별 수준에서 연결 모니터링이 지원됩니다. 이를 통해 사용자는 작업자 프로세스 수를 조절하고 최적의 성능을 위해 작업자 간에 연결을 효과적으로 분산하여 NGINX 성능을 미세하게 조정할 수 있습니다.
  • 진단 패키지 NGINX 진단 패키지는 문제 해결에 필요한 모든 데이터를 단일 압축 파일로 수집합니다. 이를 통해 NGINX Plus 사용자와 F5 지원팀 간의 의사소통이 개선되어 효율성이 증가하고 문제 해결에 걸리는 시간이 단축됩니다.

이번 릴리스의 핵심은 NGINX 오픈 소스에서 물려받은 새로운 기능과 버그 수정, NGINX JavaScript 모듈에 대한 업데이트입니다.

행동의 중요한 변화

메모 : NGINX Plus R29가 아닌 다른 릴리스에서 업그레이드하는 경우, 현재 버전과 이 버전 사이의 모든 릴리스에 대한 이전 발표 블로그중요한 동작 변경 사항 섹션을 확인하세요.

listen … http2 지시어의 사용 중단

NGINX 1.25.1에서는 listen … http2 지시어가 더 이상 사용되지 않습니다. nginx -t를 사용하여 NGINX 구성을 확인하면 해당 효과에 대한 경고가 발생합니다.  

nginx -t

nginx: [경고] "listen ... http2" 지시어는 더 이상 사용되지 않습니다. 대신 etc/nginx/nginx.conf에서 "http2" 지시어를 사용하세요:15

nginx: 구성 파일 /etc/nginx/nginx.conf 구문은 정상입니다.

nginx: 구성 파일 /etc/nginx/nginx.conf 테스트가 성공했습니다.

이 지침을 사용하는 모든 기존 사용자는 NGINX를 업그레이드하고 서버별로 HTTP/2를 활성화하는 http2 지침을 사용하는 것이 좋습니다.

이것을 변경하세요:

듣기 443 ssl http2;

이에 대하여:

듣기 443 ssl;
http2 켜짐;

Amazon Linux 2에서 GeoIP2 모듈 사용 불가

이전 버전의 NGINX Plus는 Amazon Linux 2 EPEL 저장소의 "libmaxminddb" 라이브러리를 사용하여 GeoIP2 모듈을 빌드했습니다. EPEL 저장소는 더 이상 이 라이브러리를 제공하지 않으며 Amazon Linux 2 배포판에서 기본적으로 액세스할 수도 없습니다. 따라서 Amazon Linux 2에 맞게 빌드할 수 있는 실행 가능한 방법이 없으므로 해당 모듈은 NGINX Plus R30에서 더 이상 사용할 수 없습니다.

MQTT 지침 변경

MQTT 메시지를 구성하는 버퍼 크기를 지정하는 데 사용되는 mqtt_rewrite_buffer_size 지시어는 mqtt_buffers 지시어로 대체되었습니다. 새로운 지침을 사용하면 연결당 할당할 수 있는 버퍼 수를 지정할 수 있고 각 버퍼의 크기도 지정할 수 있습니다.

업데이트된 API 버전

NGINX Plus API의 버전 번호는 Per-Worker Connection Telemetry 에서 설명된 작업자별 메트릭 추가를 반영하여 8에서 9로 업데이트되었습니다. 이전 버전 번호는 계속 작동하지만 이후 API 버전에서 추가된 메트릭은 출력에 포함되지 않습니다.

플랫폼 지원 변경

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

  • 데비안 12
  • 알파인 3.18

제거된 이전 운영 체제:

  • 2023년 5월 1일 EOL(End-Of-Life)에 도달한 Alpine 3.14
  • 2023년 4월 26일 EOL에 도달한 Ubuntu 18.04

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

  • 2023년 11월 EOL에 도달하는 Alpine 3.15

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

QUIC+HTTP/3에 대한 기본 지원

QUIC을 통한 HTTP/3는 많은 기업 고객이 요청했던 매우 기대되는 기능이었으며, NGINX Plus R30에서 공식적으로 소개하게 되어 기쁩니다. 이는 우리가 향후 릴리스에서 계속해서 집중할 새로운 기술과 구현입니다. NGINX Plus 사용자 여러분께서는 비운영 환경에서 먼저 사용해 보시고 귀중한 피드백을 공유해 주시기 바랍니다.

NGINX Plus는 안전한 통신과 암호화 기능을 위해 OpenSSL을 사용하며, 운영 체제와 함께 제공되는 SSL/TLS 라이브러리를 활용합니다. 그러나 QUIC의 TLS 인터페이스는 이 릴리스 시점에 OpenSSL에서 지원되지 않기 때문에 HTTP/3에 필요한 누락된 TLS 기능을 제공하기 위해 타사 라이브러리가 필요합니다.

이러한 문제를 해결하기 위해 NGINX 팀은 OpenSSL 호환성 계층을 개발해 quictls, BoringSSL, LibreSSL과 같은 타사 TLS 라이브러리를 빌드하고 제공할 필요성을 제거했습니다. 이를 통해 사용자 정의 TLS 구현이나 타사 라이브러리의 일정 및 로드맵에 대한 종속성 없이 NGINX에서 종단 간 QUIC+HTTP/3 환경을 관리할 수 있습니다. 향후 릴리스에서는 0-RTT 지원 등의 더 많은 기능과 옵션을 추가하여 OpenSSL 호환성 계층을 개선할 계획입니다.

QUIC+HTTP/3 구성은 다음과 같습니다.
   

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent" "$http3"';
        access_log logs/access.log quic;

        server {
            # 더 나은 호환성을 위해 권장
             # quic과 https에 동일한 포트를 사용하는 것
            listen 8443 quic reuseport;
             listen 8443 ssl;

            ssl_certificate     certs/example.com.crt;
             ssl_certificate_key certs/example.com.key;

            location / {
                 # 브라우저가 quic 포트로 직접 연결하기 위해 필요
                 add_header Alt-Svc 'h3=":8443"; ma=86400';
            }
        }
    }

NGINX Plus R30의 QUIC+HTTP/3 지원은 단일 바이너리로 제공됩니다. 반면 NGINX Plus R29에 도입된 실험적 HTTP/3 지원의 경우 nginx quic에 대한 별도 바이너리가 있었습니다. 이러한 개선을 통해 사용자 환경에 기능을 배포하기가 더 쉬워졌습니다.

메모: NGINX Plus R30에서는 독립형 QUIC 바이너리에 대한 지원 및 업데이트를 종료하고 올해 말에 다운로드 옵션에서도 제거할 계획입니다.

작업자당 연결 원격 측정

NGINX Plus 사용자는 이제 작업자 프로세스당 총 연결 수를 모니터링하여 worker_connections 지시문을 적절히 조정할 수 있습니다. 이러한 개선을 통해 사용자는 작업자 간에 연결이 어떻게 분산되는지 더 잘 파악할 수 있습니다. 작업자 연결을 조정할 수 있으면 NGINX 배포를 더 잘 평가하는 데도 도움이 됩니다.

작업자당 연결 메트릭은 REST API를 통해 제공됩니다. 작업자당 연결 메트릭을 검색하려면 …/api/9/workers 엔드포인트를 사용하세요.

개별 작업자에 대한 작업자별 연결 메트릭을 검색하려면 .../api/9/workers/< worker id > 엔드포인트를 사용합니다. 작업자 ID는 0부터 시작하는 인덱스를 갖습니다.

다음은 응답 예입니다.

{
      {
          "ID": 0,
        "pid": 2346,
        "연결": {
            "수락됨": 1,
            "드롭됨": 0,
            "활성": 1,
            "유휴": 0
        },
        "http": {
            "요청": {
                "총계": 15,
                "현재": 1
            }
        }
    },
    {
        "id": 1,
        "pid": 1234,
        "연결": {
            "수락됨": 3,
            "드롭됨": 0,
            "활성": 1,
            "유휴": 0
        },
        "http": {
            "요청": {
                "총계": 15,
                "현재": 1
              }
          }
      },

      ...

  }

아래에 표시된 대로, 작업자별 연결 메트릭은 NGINX Plus Live Activity Monitoring 대시보드 에서 사용할 수 있습니다. demo.nginx.com에서 이 기능의 라이브 데모에 접속하세요.

NGINX Plus 연결 및 요청에 대한 아래 정보를 보여주는 NGINX Plus 라이브 활동 모니터링 대시보드

대시보드는 NGINX Plus 연결 및 요청에 대한 아래 정보를 보여줍니다.

사이:

  • 작업자당 허용된 연결
  • 작업자당 활성 연결
  • 작업자당 유휴 연결
  • 작업자당 끊어진 연결

요청사항:

  • 근로자당 현재 요청
  • 근로자당 총 요청 수
  • 작업자당 초당 요청 수

진단 패키지

문제 해결에 걸리는 시간을 줄이기 위해, 진단 패키지는 NGINX 환경에서 문제를 해결하는 데 필요한 데이터를 수집하는 프로세스를 간소화합니다. 진단 패키지는 문제 해결에 필요한 정보를 수동으로 요청하고 수집하는 데 따른 불일치와 지연을 방지하는 데 도움이 되므로 NGINX Plus 고객과 F5 지원 팀 간의 상호 작용을 보다 효율적으로 만들어줍니다.

진단 패키지는 다음을 수집합니다.

  • NGINX 정보 – NGINX Plus 버전, 구성, 프로세스 정보, 타사 모듈, 로그, API 통계 및 엔드포인트
  • 시스템 정보 - 호스트 명령( ps , lsof , vmstat 등)
  • 서비스 정보systemd
  • NGINX 에이전트 - 로그 및 구성(있는 경우)
  • NGINX 앱 보호 - 로그 및 구성(있는 경우)
  • 지원 패키지 로그 - 수집된 모든 파일 목록을 포함하는 로그

진단 패키지를 추가한 목적은 패키지 내 스크립트가 어떤 명령을 실행하는지, 어떤 데이터를 수집하는지 사용자에게 투명하게 알리는 것입니다. 자세한 내용은 NGINX Plus 진단 패키지 페이지를 참조하세요.

메모: 진단 패키지는 현재 NGINX Plus R30 릴리스의 일부로 출시될 예정이라고 발표되었지만, 진단 패키지는 실제로 릴리스와 무관합니다. 앞으로는 여러분과 F5 지원팀의 피드백을 토대로 문제 해결 데이터 수집 프로세스를 개선하고자 업데이트할 계획입니다.

NGINX Plus R30의 기타 개선 사항

MQTT 최적화

MQTT(Message Queuing Telemetry Transport) 필터 모듈의 메모리 소비가 개선되어 처리량이 4~5배 증가했습니다.

mqtt_rewrite_buffer_size 지시어가 제거되었습니다. 대신, 새로운 지침 mqtt_buffers <숫자> <크기> 모듈이 연결당 할당할 수 있는 버퍼의 수와 각 버퍼의 크기를 지정하기 위해 도입되었습니다. 버퍼의 기본 개수는 100이고 각 버퍼의 기본 크기는 1024바이트입니다. 따라서 mqtt_buffers 변수의 기본값은 <100> <1024>가 됩니다.

DNS 재로드 최적화

NGINX Plus는 이제 재로드 시 동적으로 확인된 업스트림 호스트의 DNS 이름 만료 시간을 보존하므로 구성 재로드 시 재확인이 필요 없습니다. 이 업데이트 이전에는 모든 업스트림에 대해 DNS 확인이 트리거되었습니다. 이 업데이트를 적용하면 NGINX는 모든 업스트림에 대한 DNS 확인 및 만료 시간을 보존하고 다시 로드할 때 새롭거나 변경된 업스트림에 대해서만 DNS 확인을 트리거합니다.

이러한 최적화는 많은 수의 업스트림 호스트가 포함된 NGINX 환경에 가장 큰 영향을 미칩니다. NGINX 구성에 업스트림 호스트가 100개 이상 있는 경우 최적화 효과가 가장 두드러집니다.

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

NGINX Plus R30은 NGINX Open Source 1.25.1을 기반으로 하며 NGINX Plus R29가 출시된 이후(NGINX 1.25.0 및 1.25.1) 기능 변경, 특징 및 버그 수정을 계승했습니다.

변화

  • HTTP/2 서버 푸시 지원이 제거되었습니다. HTTP/2 server_push는 채택이 최소화되었고 매우 제한적인 사용 사례에서만 사용할 수 있었습니다. (IETF 102 참조 문서에 따르면 세션의 0.04%에서만 사용되었습니다. RFC 913에 따르면 "효과적으로 사용하기 어렵습니다.") Chrome 버전 106에서는 HTTP/2 서버 푸시가 비활성화 되었습니다. 이 변경의 일환으로 http2_push , http2_push_preloadhttp2_max_concurrent_pushes 지시어가 더 이상 사용되지 않습니다.
  • 더 이상 지원되지 않는 ssl 명령어입니다. ssl 지시어는 NGINX 1.15.0에서 더 이상 사용되지 않으며 listen 지시어의 ssl 매개변수로 대체되었습니다. 더 이상 사용되지 않는 ssl 명령어는 제거되었습니다.
  • 위에서 언급했듯이, listen … http2 명령어는 더 이상 사용되지 않습니다. 사용자는 대신 http2 지시어를 사용하는 것이 좋습니다.
    • OpenSSL v1.0.2h 이상을 사용한 SSL 연결의 경우, 서버 이름 식별(SNI)을 통해 선택한 가상 서버에서 HTTP/2 프로토콜이 활성화되어 있으면 ALPN(Application Layer Protocol Negotiation) 콜백에서 자동으로 해당 프로토콜이 선택됩니다.
    • 이전 버전의 OpenSSL의 경우 HTTP/2 프로토콜은 기본 가상 서버 구성에 따라 활성화됩니다.
    • 일반 TCP 연결의 경우, 기본 가상 서버에서 HTTP/2가 활성화되어 있으면 HTTP/2가 자동으로 감지됩니다. 서문이 일치하지 않으면 HTTP/0.9-1.1이 가정됩니다.
  • 동일한 수신 소켓에서 Cleartext TCP(h2c)를 통한 HTTP/2와 HTTP/1.1에 대한 지원이 추가되었습니다. 기존 구현에서는 사용자가 h2c 수신 소켓(예: listen port_num http2 )을 구성하는 경우 HTTP/2 연결만 생성할 수 있습니다. h2 수신 소켓은 ALPN을 통한 프로토콜 협상을 통해 HTTP/1.1과 HTTP/2를 모두 지원합니다. 그러나 기존 구현에서는 HTTP/1.1 클라이언트가 소켓에서 실패하여 프로토콜 협상 수단으로 HTTP 업그레이드를 사용할 수 없습니다. 이 변경으로 HTTP/2를 사용할 때 일반 TCP 소켓에서 HTTP/1.1과 HTTP/2를 동시에 지원할 수 있습니다.
  • $sent_http_*를 사용하여 버퍼 오버런 가능성을 방지할 수 있습니다. 다중 헤더 $sent_http_ 변수를 평가하는 논리의 결함으로 인해 특정 요소가 지워졌지만 연결 목록에 남아 있는 경우 버퍼 오버런이 발생할 가능성이 있습니다. 이 문제는 타사 모듈을 사용하여 다중 헤더 값을 재정의할 때 나타났습니다. 이 업데이트에서는 정교한 경계 검사가 도입되어 이러한 변수를 더 안전하게 처리하고 평가할 수 있습니다.

특징

  • HTTP/3에 대한 전체 지원이 추가되었습니다. NGINX 1.25.0 메인라인 버전에서는 HTTP/3에 대한 지원이 도입되었으며, 이 지원은 NGINX Plus R30에 병합되었습니다. NGINX Plus R30 구현은 NGINX Plus R29에서 제공된 실험적 패키지와 비교했을 때 다음과 같은 변경 사항이 있습니다.
  •  
    • quic_mtu 지시어가 제거되었습니다.
    • listen 지시문의 http3 매개변수가 제거되었습니다.
    • 스트림 모듈에서 QUIC 지원이 제거되었습니다.
    • HTTP/3 서버 푸시 제거
    • OpenSSL 3.2+를 사용하여 OpenSSL 호환성 계층을 빌드하는 것을 수정했습니다.

버그 수정

  • 정규 표현식(regex)이 목록 할당에 실패할 경우 발생 하는 세그폴트를 수정했습니다.

최근 릴리스에서 상속받은 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록을 보려면 NGINX CHANGES 파일을 참조하세요.

NGINX JavaScript 모듈의 변경 사항

NGINX Plus R30은 NGINX JavaScript(njs) 모듈 버전 0.8.0의 변경 사항을 통합했습니다.

특징

  • 글로벌 NGINX 속성 소개:
    ngx.build , ngx.conf_file_path , ngx.error_log_path , ngx.prefix , ngx.version , ngx.version_numberngx.worker_id .
  • 작업자 프로세스 간에 공유되는 사전을 선언할 수 있는 http스트림js_shared_dict_zone 지시어를 도입했습니다.
  • ES13 호환 배열 메서드 추가: Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed() .
  • ES13 호환 TypedArray 메서드 추가: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed() .
  • WebCrypto API 에 CryptoKey 속성을 추가했습니다. 다음 속성이 추가되었습니다: algorithm, extractable, type, usages .

변화

  • Fetch API 에서 금지된 헤더에 대한 특수 처리가 제거되었습니다.0.7.10 .
  • 버전 0.5.0에서 더 이상 사용되지 않는 r.requestBody()를 http 모듈에서 제거했습니다. 대신 r.requestBuffer 또는 r.requestText 속성을 사용해야 합니다.
  • 버전 0.5.0에서 더 이상 사용되지 않는 http 모듈에서 r.responseBody()를 제거했습니다. 대신 r.responseBuffer 또는 r.responseText 속성을 사용해야 합니다.
  • http 모듈에서 필터링하는 동안 r.internalRedirect() 에서 예외가 발생합니다.
  • 네이티브 메서드는 retval 인수와 함께 제공됩니다. 이 변경으로 인해 njs의 C 확장과의 호환성이 깨져 코드 수정이 필요합니다.
  • 규격에 맞지 않는 더 이상 사용되지 않는 String 메서드가 제거되었습니다. 다음 방법이 제거되었습니다. String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(인코딩) .
  • GNU readline을 사용한 빌드 지원이 제거되었습니다.

버그 수정

  • http 모듈에서 필터링할 때 r.status 세터를 고정했습니다.
  • http 모듈의 Location 헤더 설정이 고정되었습니다.
  • сrypto.getRandomValues() 의 retval을 고정했습니다.
  • 함수 표현식을 사용하여 계산된 속성 이름의 고정 평가를 수행했습니다.
  • 배열에 선언된 함수 표현식에 대한 암시적 이름이 고정되었습니다.
  • for-in 루프의 구문 분석이 고정되었습니다.
  • ISO-8601 형식과 UTC 시간 오프셋을 사용하여 Date.parse()를 고정했습니다.

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

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

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

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


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