NGINX Plus R30 발표
NGINX Plus Release 30 (R30)의 출시 발표하게 되어 기쁩니다. NGINX 오픈소스를 기반으로 한 NGINX Plus는 유일한 all-in-one 소프트웨어 웹 서버, 로드 밸런서, 리버스
프록시, 콘텐츠 캐시 및 API Gateway입니다.
NGINX Plus R30의 새롭고 향상된 기능은 다음과 같습니다.
- QUIC+HTTP/3에 대한 기본 지원 – NGINX Plus는 이제 HTTP/3를 공식적으로 지원합니다. 이 구현은 HTTP/3 지원을 위해 필요한 OpenSSL TLS 기능을 제공하기 위해 third-party 라이브러리에 의존하지 않습니다. NGINX팀이 개발한 OpenSSL 호환성 레이어를 사용하여 OpenSSL에서 지원하지 않는 QUIC TLS 인터페이스 문제를 우회합니다.
- Per-worker별 연결 원격 측정 – 이제 per-worker 수준에서 연결 모니터링이 지원됩니다. 이를 통해 사용자는 worker 프로세스의 수를 조절하고 연결을 worker 간에 효과적으로 분산하여 최적의 성능을 얻기 위해 NGINX 성능을 미세 조정할 수 있습니다.
- 진단 패키지 – NGINX 진단 패키지는 문제 해결에 필요한 모든 데이터를 하나의 압축 파일로 수집합니다. 이로써 NGINX Plus 사용자와 F5 지원 간의 커뮤니케이션이 개선되며, 효율성이 향상되고 문제 해결에 걸리는 시간이 줄어듭니다.
이번 릴리스는 NGINX 오픈 소스로부터 새로운 기능과 버그 수정이 그대로 이어지며, NGINX JavaScript 모듈의 업데이트도 포함되어 있습니다.
목차
1. 행동의 중요한 변화
1-1. listen 중단 … http2 지시문
1-2. Amazon Linux 2에서 GeoIP2 모듈을 사용할 수 없음
1-3. MQTT 지시문의 변경 사항
1-4. API 버전 업데이트
1-5. 플랫폼 지원 변경 사항
2. 새로운 기능 자세히 보기
2-1. QUIC+HTTP/3 기본 지원
2-2. Per-Worker 연결 원격 측정
2-3. 진단 패키지
3. NGINX Plus R30의 기타 개선 사항
3-1. MQTT 최적화
3-2. DNS Reload 최적화
3-3. NGINX 오픈 소스에서 상속된 변경 사항
3-4. NGINX JavaScript 모듈의 변경 사항
4. NGINX Plus 업그레이드 또는 NGINX Plus 사용해보기
1. 행동의 중요한 변화
1-1. listen 중단 … http2 지시문
NGINX 1.25.1에서는 listen … http2 지시문이 폐지되었습니다. 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 44e ssl;
http2 on;
1-2. Amazon Linux 2에서 GeoIP2 모듈을 사용할 수 없음
이전 버전의 NGINX Plus는 GeoIP2 모듈을 빌드하기 위해 Amazon Linux 2 EPEL 리포지토리의 “libmaxminddb” 라이브러리를 사용했습니다. 그러나 EPEL 저장소는 이제 이 라이브러리를 제공하지 않으며, Amazon Linux 2 배포판에서 직접 액세스할 수도 없습니다. 따라서 Amazon Linux 2용으로 이 모듈을 빌드할 수 있는 현식적인 방법이 없어 NGINX Plus R30에서는 해당 모듈을 저 이상 사용할 수 없습니다.
1-3. MQTT 지시문의 변경 사항
mqtt_rewrite_buffer_size 지시문은 MQTT 메시지를 구성하는 데 사용되는 버퍼의 크기를 지정하는 데 사용되었습니다. 그러나 이제 mqtt_buffer 지시문이 나타났습니다. 이 새로운 지시문은 연결당 할당할 수 있는 버퍼 수를 지정할 수 있으며 각 버퍼의 크기도 지정할 수 있습니다.
1-4. API 버전 업데이트
NGINX Plus API의 버전 번호가 8에서 9로 업데이트되었습니다. 이 변경은 Per-Worker 연결 원격 측정에서 설명한 Per-Worker별 메트릭 추가를 반영하기 위한 것입니다. 이전 버전 번호도 여전히 작동하지만, 나중의 API 버전에서 추가된 메트릭이 출력에 포함되지 않습니다.
1-5. 플랫폼 지원 변경 사항
새로운 운영체제 지원:
- Debian 12
- Alpine 3.18
이전 운영체제 제거:
- 2023년 5월 1일에 수명 종료(EOL)에 도달한 Alpine 3.14
- 2023년 4월 26일에 EOL에 도달한 Ubuntu 18.04
더 이상 사용되지 않으며 NGINX Plus R31에서 제거될 예정인 이전 운영
체제:
- 2023년 11월에 단종될 Alpine 3.15
2. 새로운 기능 자세히 보기
2-1. QUIC+HTTP/3 기본 지원
HTTP/3 over QUIC은 많은 엔터프라이즈 고객들에게서 요청받았던 기능으로 많은 기대를 받아왔습니다. 기쁘게도 이를 NGINX Plus R30에서 공식적으로 소개하게 되었습니다. 이것은 앞으로도 계속해서 주력 기술 및 구현 분야가 될 것입니다. NGINX Plus 사용자들에게는 우선 비 프로덕션 환경에서 시도해보고 유용한 피드백을 공유해 주실 것을 권장합니다.
NGINX Plus는 안전한 통신과 암호화 기능에 대해 OpensSSL을 의존하며 운영체제와 함께 제공되는 SSL/TLS 라이브러리를 사용합니다. 그러나 QUIC의 TLS 인터페이스는 OpenSSL에서 현재 지원되지 않으므로 HTTP/3에서 필요한 부족한 TLS 기능을 위해 third-party 라이브러리가 필요합니다.
이러한 문제에 대응하기 위해 NGINX팀은 OpenSSL 호환성 레이어를 개발하여 quictls, BoringSSL 및 LibreSSL과 같은 third-party TLS 라이브러리를 빌드하고 제공하는 필요성을 제거했습니다. 이를 통해 사용자 정의 TLS 구현의 부담이나 third-party 라이브러리의 일정 및 로드맵 종속성 없이 NGINX에서 end-to-end QUIC+HTTP/3 경험을 관리할 수 있게 되었습니다.
앞으로의 릴리스에서 OpenSSL 호환성 레이어를 더 많은 기능과 옵션(예: 0-RTT 지원)으로 향상시킬 계획입니다.
다음은 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 바이너리 파일에 대한 지원 및 업데이트를 종료하고, 올해 후반에 다운로드 옵션에서 제거할 계획입니다.
2-2. Per-Worker 연결 원격 측정
NGINX Plus 사용자는 이제 각 per-worker 프로세스별 연결 수를 모니터링하여 worker_connections 지시문을 적절하게 조정할 수 있습니다. 이 개선 사항은 사용자에게 연결이 worker 간에 어떻게 분산되는지에 대한 더 나은 시각성을 제공합니다. worker 연결을 조정할 수 있음으로써 NGINX 배포를 더 잘 평가하는 데 도움이 됩니다.
per-worker별 연결 메트릭은 REST API를 통해 사용할 수 있습니다. per-worker별 연결 메트릭을 검색하려면 …/api/9/workers 엔드포인트를 사용하십시오.
개별 workrer의 per-worker 연결 메트릭을 검색하려면 …/api/9/workers/<worker id> 엔드포인트를 사용하십시오. worker 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
}
}
},
…
}
per-worker별 연결 메트릭은 아래에 표시된 대로 NGINX Plus Live Active Monitoring 대시보드에서 사용할 수 있습니다. 이 기능의 라이브 데모에는 demo.nginx.com에서 액세스할 수 있습니다.

대시보드에는 NGINX Plus 연결 및 요청에 대한 정보가 아래에 표시됩니다.
연결:
- per worker별 허용되는 연결
- per worker별 활성 연결
- per worker별 유휴 연결
- per worker별 연결 끊김
요청:
- per worker별 현재 요청
- per worker별 총 요청
- per worker별 요청/sec
2-3. 진단 패키지
문제 해결을 위한 처리 시간을 줄이기 위해 진단 패키지는 NGINX 환경에서 문제를 해결하는 데 필요한 데이터 수집 프로세스를 간소화합니다. 진단 패키지는 수동으로 정보를 요청하고 수집하는 과정으로 인한 불일치와 지연을 방지하여 NGINX Plus 고객과 F5 지원 간의 상호작용을 더 효율적으로 만들어줍니다.
진단 패키지는 다음을 수집합니다:
- NGINX 정보 – NGINX Plus 버전, 구성, 프로세스 정보, third-party 모듈, 로그, API 통계 및 엔드포인트
- 시스템 정보 – 호스트 명령(ps, lsof. vmstat등)
- 서비스 정보 – systemd 등
- NGINX Agent – 로그 및 구성(있는 경우)
- NGINX App Protect – 로그 및 구성(있는 경우)
- 지원 패키지 로그 – 수집된 모든 파일 목록이 포함된 로그
진단 패키지를 추가함으로써 목표는 패키지 내 스크립트가 실행하는 명령어와 수집는 데이터에 대해 사용자에게 투명하게 보여주는 것입니다. NGINX Plus 진단 패키지 페이지를 참조하시기 바랍니다. (링크 예정, 그동안 여기를 클릭하여 스크립트를 다운로드할 수 있습니다).
참고: 진단 패키지의 가용성은 현재 NGINX Plus R30 릴리스의 일부로 발표되었지만, 실제로 진단 패키지는 릴리스에 의존하지 않습니다. 앞으로는 여러분과 F5 지원의 의견을 기반으로 진단 데이터 수집 프로세스를 개선하기 위해 진단 패키지를 업데이트할 계획입니다.
3. NGINX Plus R30의 기타 개선 사항
3-1. MQTT 최적화
MQTT(Message Queuing Telemetry Transport) 필터 모듈에 대한 메모리 소비 개선으로 이제 처리량이 4~5배 증가했습니다.
mqtt_rewrite_buffer_size 지시문이 제거되었습니다. 대신에 새로운 지시문 mqtt_buffers <num> <size>가 도입되어 모듈이 연결 당 얼마나 많은 버퍼를 할당할 수 있는지와 각 버퍼의 크기를 지정합니다. 기본 버퍼 수는 100이며 각 버퍼의 기본 크기는 1024 bytes이며, 변수 mqtt_buffers의 기본값은 <100> <1024> 입니다.
3-2. DNS Reload 최적화
NGINX Plus는 이제 설정 reload 시 동적으로 해결된 상위 호스트의 DNS 이름 만료 시간을 유지하여 설정 reload 시 다시 확인할 필요가 없습니다. 이 업데이트 이전에는 모든 상위 호스트에 대해 DNS 해결이 트리거되었습니다. 이 업데이트로 NGINX는 모든 상위 호스트의 DNS 해결 및 만료 시간을 보존하며, reload 시 새로운 또는 변경된 상위 호스트에 대해만 DNS 해결을 트리거합니다.
이 최적화는 상위 호스트의 수가 많은 NGINX 환경에서 가장 큰 영향을 미칠 것입니다. NGINX 구성에서 100개 이상의 상위 호스트가 있는 경우 최적화 효과가 가장 두드러질 것입니다.
3-3. NGINX 오픈 소스에서 상속된 변경 사항
NGINX Plus R30은 NGINX 오픈 소스 1.25.1을 기반으로 하며 NGINX Plus R29가 출시된 이후(NGINX 1.25.0 및 1.25.1에서) 기능 변경 사항, 기능 및 버그 수정 사항을 상속합니다.
Changes
- HTTP/2 서버 push 지원은 제거되었습니다. HTTP/.2 서버 push는 매우 제한된 사용 사례에서만 사용 사례에서만 사용 가능했으며 사용률이 매우 낮았습니다. (IETF 102 참조 문서에 따르면 세션의 0.04%에서만 사용되었습니다. RFC 913에 따르면 “효과적으로 사용하기 어려웠습니다.”) HTTP/2 서버 push는 Chrome 버전 106에서 비활성화되었습니다. 이 변경의 일환으로 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 연결의 경우, Server Name Identification(SNI)에 의해 선택된 가상 서버에서 HTTP/2 프로토콜이 활성화되면 Application Layer Protocol Negotiation (ALPN) 콜백에 의해 자동으로 선택됩니다.
- 이전 버전의 OpenSSL의 경우, HTTP/2 프로토콜은 기본 가상 서버 구성을 기반으로 활성화됩니다.
- 일반 TCP 연결의 경우, HTTP/2가 기본 가상 서버에서 활성화되어 있는 경우 HTTP/2 preface를 통해 자동으로 감지됩니다. preface가 일치하지 않으면 HTTP/0.9-1.1로 가정됩니다.
- 지금은 Cleartext TCP(h2c)를 통한 HTTP/2와 HTTP/1.1을 동시에 지원합니다. 기존 구현에서는 사용자가 h2c listening 소켓을 구성할 경우 (예:listen port_num http2), HTTP/2 연결만 생성할 수 있었습니다. h2 listening 소켓은 ALPN을 통한 프로토콜 협상과 함께 HTTP/1.1 및 HTTP/2를 모두 지원합니다. 그러나 기존 구현에서는 HTTP/1.1 클라이언트가 소켓에서 실패하여 프로토콜 협상 수단으로서의 HTTP Upgrade를 사용하는 것을 방해했습니다. 이 변경으로 HTTP/2를 사용할 때 일반 TCP 소켓에서 HTTP/1.1과 HTTP/2를 동시에 지원할 수 있습니다.
- 일부 $sent_http_* 변수에서의 가능한 버퍼 오버런을 피하기 위한 지원이 추가되었습니다. 일부 multi-header $sent_http_ 변수의 평가 논리에 결함이 있어, 특정 요소가 지워지지만 연결된 목록에 남아 있는 경우 잠재적인 버퍼 오버런이 발생할 수 있었습니다. 이 문제는 third-party 모듈을 사용하여 multi-header 값을 무효화하는 경우에 나타났습니다. 이 업데이트는 보다 정교한 경계 검사를 도입하여 이러한 변수의 안전한 처리 및 평가를 보장합니다.
Features
- Full HTTP/3 지원이 추가되었습니다. NGINX 1.25.0 mainline 버전은 HJTTP/3를 지원하게 되었고, 이러한 지원은 NGINX Plus R30에 통합되었습니다. NGINX Plus R30의 구현은 NGINX Plus R29에서 실험적으로 제공되었던 패키지와 비교할 때 다음과 같은 변경 사항이 있습니다:
- 제거된 quic_mtu 지시문
- listen 지시문의 http3 매개변수 제거
- stream 모듈에서 QUIC 지원 제거
- 제거된 HTTP/3 서버 push
- OpenSSL 3.2+를 사용하여 OpenSSL 호환성 레이어 빌드 수정
Bug Fix
- 정규식(regex) 연구 목록 할당이 실패하는 경우 segfault를 수정했습니다.
최신 릴리스에서 상속된 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록은 NGINX CHANGE 파일을 참조하십시오.
3-4. NGINX JavaScript 모듈의 변경 사항
NGINX Plus R30은 NGINX JavaScript(njs)모듈 버전 0.8.0의 변경 사항을 통합합니다.
Features
- 글로벌 NGINX 속성 도입:
ngx.build, ngx.conf_file_path, ngx.error_log_path, ngx.prefix, ngx.version, ngx.version_number 및 ngx.worker_id. - worker 프로세스 간에 공유도히는 사전을 선언할 수 있는 http 및 stream에 대한 js_shared_dict_zone 지시문을 도입했습니다.
- ES13-compliant Typedarray 메소드 추가: Array.from(), Array.prototype.toSorted(), Array.prototyper.toSpliced(), %Type%.prototype.toReversed().
- WebCrypto API에 CryptoKey 속성을 추가했습니다. algorithm, extractable, type, usages 속성이 추가되었습니다.
Changes
- 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 메소드가 제거되었습니다. 다음 메소드가 제거되었습니다: String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encoding).
- CNU readline으로 빌드하기 위한 지원이 제거되었습니다.
Bug Fixes
- http 모듈에서 필터링할 때 r.status setter를 수정했습니다.
- http 모듈의 Location 헤더 설정을 수정했습니다.
- crypto.getRandomValues()의 retval을 수정했습니다.
- 함수 표현식으로 계산된 속성 이름의 평가를 수정했습니다.
- 배열에 선언된 함수 표현식의 암시적 이름을 수정했습니다.
- for-ion 루프의 구문 분석을 수정했습니다.
- ISO-8601 형식 및 UTC 시간 오프셋을 사용하여 Date.parse()를 수정했습니다.
모든 기능, 변경 사항 및 버그 수정에 대한 포괄적인 목록은 njs 변경 로그를 참조하십시오.
4. NGINX Plus 업그레이드 또는 NGINX Plus 사용해보기
만약 NGINX Plus를 사용 중이라면, 가능한 빨리 NGINX Plus R30로 업그레이드하는 것을 강력히 권장합니다. 새로운 기능뿐만 아니라 여러 가지 추가적인 수정과 개선 사항도 함께 포함되어 있습니다. 최신 버전으로 업그레이드하면 NGINX에서 지원 티켓을 열어야 할 경우에도 도움을 받을 수 있습니다.
아직 NGINX Plus를 사용해보지 않았다면, 그 기능을 확인해 보시기를 권장합니다. 보안, 로드 밸런싱, API Gateway 사용 사례 또는 향상된 모니터링 및 관리 API를 갖춘 완전히 지원되는 웹 서버로 활용할 수 있습니다. 무료 30일 평가판을 통해 오늘부터 NGINX Plus의 장점을 경험해 보세요.
NGINX에 대한 최신 정보들을 빠르게 전달받고 싶으시다면, 아래의 뉴스레터를 구독하세요.
댓글을 달려면 로그인해야 합니다.