관리자
조회수 160


NGINX Plus 릴리스 30(R30)의 출시를 발표하게 되어 기쁘게 생각합니다. 

NGINX 오픈 소스를 기반으로 하는 NGINX Plus는 유일한 올인원 소프트웨어 웹 서버, 로드 밸런서, 리버스 프록시, 콘텐츠 캐시 및 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 지시어 사용 중단

listen ... http2 지시어는 NGINX 1.25.1에서 더 이상 사용되지 않습니다. 

nginx -t를 사용하여 NGINX 구성을 확인하면 해당 경고가 표시됩니다.

nginx -t

nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in etc/nginx/nginx.conf :15

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

이 지시어를 사용하는 모든 기존 사용자는 NGINX를 업그레이드하고 

서버별로 HTTP/2를 활성화하는 http2 지시어를 사용할 것을 강력히 권장합니다.

이것을 변경하세요:

listen 443 ssl http2;

이것으로:

LISTEN 443 SSL; HTTP2 ON;


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의 버전 번호가 8에서 9로 업데이트되었습니다. 이전 버전 번호는 여전히 작동하지만 출력에는 이후 API 버전에 추가된 메트릭이 포함되지 않습니다.


플랫폼 지원 변경 사항

새로운 운영 체제가 지원됩니다:

  • 데비안 12
  • Alpine 3.18

이전 운영 체제가 제거되었습니다:

  • 2023년 5월 1일에 지원 종료(EOL)에 도달한 Alpine 3.14
  • 2023년 4월 26일에 EOL에 도달한 Ubuntu 18.04

이전 운영 체제는 더 이상 사용되지 않으며 NGINX Plus R31에서 제거될 예정입니다:

  • Alpine 3.15, 2023년 11월에 EOL 예정



새로운 기능 상세 정보


QUIC+HTTP/3 기본 지원

QUIC을 통한 HTTP/3은 많은 기업 고객들이 요청해 온 기능으로, NGINX Plus R30에 공식적으로 도입하게 되어 매우 기쁘게 생각합니다. 이 기능은 향후 릴리스에서 계속 집중할 새로운 기술 및 구현입니다. NGINX Plus 사용자는 먼저 비프로덕션 환경에서 사용해 보고 소중한 피드백을 공유해 주시기 바랍니다.

NGINX Plus는 운영 체제와 함께 제공되는 SSL/TLS 라이브러리를 사용하여 보안 통신 및 암호화 기능을 위해 OpenSSL에 의존합니다. 그러나 이번 릴리스에서는 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 {
              # for better compatibility it's recommended
              # to use the same port for quic and https
              listen 8443 quic reuseport;
              listen 8443 ssl;

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

              location / {
                  # required for browsers to direct them into quic port
                  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/<작업자 id> 

엔드포인트를 사용하세요. 작업자 ID에는 0 기반 인덱스가 있습니다.

다음은 샘플 응답입니다:

{
      {
          "id": 0,
          "pid": 2346,
          "connections": {
              "accepted": 1,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },
      {
          "id": 1,
          "pid": 1234,
          "connections": {
              "accepted": 3,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },

      ...

  }

작업자별 연결 메트릭은 아래와 같이 NGINX Plus 실시간 활동 모니터링 대시보드에서 확인할 수 있습니다. 

이 기능의 라이브 데모는 demo.nginx.com에서 확인할 수 있습니다.

NGINX Plus Live Activity Monitoring Dashboard showing the information below about NGINX Plus connections and requests

대시보드에는 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) 필터 모듈의 메모리 소비가 개선되어 처리량이 4~5배 증가했습니다.

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


DNS 재로드 최적화

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

이 최적화는 많은 수의 업스트림 호스트를 포함하는 NGINX 환경에 가장 큰 영향을 미칩니다. NGINX 구성에 100개 이상의 업스트림 호스트가 있는 경우 최적화가 가장 뚜렷하게 나타납니다.


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

NGINX Plus R30은 NGINX 오픈 소스 1.25.1을 기반으로 하며 NGINX Plus R29 출시 이후(NGINX 1.25.0 및 1.25.1에서) 이루어진 기능 변경, 특징 및 버그 수정을 상속받습니다.


변경 사항

  • HTTP/2 서버 푸시 지원이 제거되었습니다. HTTP/2 서버 푸시는 도입이 미미했으며 매우 제한된 사용 사례에서만 사용할 수 있었습니다. (IETF 102 참조 문서에 따르면 세션의 0.04%에서만 사용되었습니다. RFC 913에 따르면 "효과적으로 사용되기 어렵다.") Chrome 버전 106에서는 HTTP/2 서버 푸시가 비활성화되었습니다. 이 변경 사항의 일환으로 http2_push, http2_push_preload, http2_max_concurrent_pushes 지시문은 더 이상 사용되지 않습니다.
  • 사용되지 않는 ssl 지시어는 더 이상 지원되지 않습니다. ssl 지시어는 NGINX 1.15.0에서 더 이상 사용되지 않으며 listen 지시어의 ssl 매개변수로 대체되었습니다. 더 이상 사용되지 않는 ssl 지시어는 이제 제거되었습니다.
    • 위에서 언급했듯이 listen ... http2 지시문은 더 이상 사용되지 않습니다. 대신 http2 지시어를 사용하는 것이 좋습니다.
    • OpenSSL v1.0.2h 이상을 사용하는 SSL 연결의 경우 SNI(서버 이름 식별)로 선택한 가상 서버에서 HTTP/2 프로토콜이 활성화되어 있으면 ALPN(애플리케이션 계층 프로토콜 협상) 콜백에 의해 자동으로 선택됩니다.
    • 이전 버전의 OpenSSL의 경우 기본 가상 서버 구성에 따라 HTTP/2 프로토콜이 활성화
    • 됩니다.
    • 일반 TCP 연결의 경우, 이제 기본 가상 서버에서 HTTP/2가 활성화되어 있는 경우 HTTP/2 서문에 의해 HTTP/2가 자동으로 감지됩니다. 서문이 일치하지 않으면 HTTP/0.9-1.1로 가정합니다.
  • 동일한 수신 소켓에서 h2c(Cleartext TCP를 통한 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 호환성 레이어 구축 수정


버그 수정

  • 정규식(정규식) 스터디 목록 할당이 실패하는 경우 세그폴트를 수정했습니다.

최근 릴리스에서 상속된 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록은 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_number, ngx.worker_id.
  • 작업자 프로세스 간에 공유되는 딕셔너리를 선언할 수 있는 http 및 스트림용 js_shared_dict_zone 지시어를 도입했습니다.
  • ES13 호환 Array 메서드 추가: 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 속성을 추가했습니다. 추가된 속성은 알고리즘, 추출 가능, 유형, 용도입니다.


변경 사항

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


버그 수정

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

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



NGINX Plus 업그레이드 또는 체험

NGINX Plus를 실행 중인 경우 가능한 한 빨리 NGINX Plus R30으로 업그레이드할 것을 강력히 권장합니다. 모든 훌륭한 새 기능 외에도 몇 가지 추가 수정 및 개선 사항이 적용되며, 최신 버전을 유지하면 지원 티켓을 제기해야 하는 경우 NGINX에서 도움을 받을 수 있습니다.

아직 NGINX Plus를 사용해 보지 않으셨다면 꼭 확인해 보시기 바랍니다. 보안, 로드 밸런싱 및 API 게이트웨이 사용 사례에 사용하거나 향상된 모니터링 및 관리 API를 통해 완벽하게 지원되는 웹 서버로 사용할 수 있습니다.



위 내용과 같이 NGINX Plus를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요

 

전문가에게 상담받기







0 0