NGINX Plus 릴리스 30(R30)이 출시되었음을 기쁘게 알려드립니다. NGINX Open Source를 기반으로 하는 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 Open Source에서 이어받은 새로운 기능과 버그 수정 사항, 그리고 NGINX JavaScript 모듈 업데이트가 포함되어 있습니다.
중요한 동작 변경 사항
참고: NGINX Plus R29 이외의 릴리스에서 업그레이드하는 경우, 현재 버전과 이 버전 사이에 출시된 모든 릴리스에 대해 중요한 동작 변경 사항 섹션을 이전 릴리스 발표 블로그에서 반드시 확인하세요.
지원 중단 예정: 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 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 버전에서 추가된 메트릭이 포함되지 않습니다.
플랫폼 지원 변경 사항
새롭게 지원되는 운영 체제:
- Debian 12
- Alpine 3.18
지원이 종료된 이전 운영 체제:
- 2023년 5월 1일에 지원 종료(EOL)된 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 라이브러리를 활용합니다. 그러나 이 릴리스 시점에는 OpenSSL이 QUIC의 TLS 인터페이스를 지원하지 않으므로, 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 지원은 단일 바이너리로 제공됩니다. 이는 실험적 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> 엔드포인트를 사용합니다. 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
}
}
},
...
}워커별 연결 메트릭은 NGINX Plus Live Activity Monitoring Dashboard에서 아래와 같이 확인할 수 있습니다. demo.nginx.com에서 이 기능의 라이브 데모를 확인해 보세요.

대시보드에는 NGINX Plus 연결 및 요청에 관한 다음 정보가 표시됩니다.
연결:
- 워커당 허용된 연결 수
- 워커당 활성 연결 수
- 워커당 유휴 연결 수
- 워커당 끊어진 연결 수
요청:
- 워커당 현재 요청 수
- 워커당 총 요청 수
- 워커당 초당 요청 수
진단 패키지
문제 해결에 걸리는 시간을 단축하기 위해 진단 패키지는 NGINX 환경의 문제를 해결하는 데 필요한 데이터 수집 프로세스를 간소화합니다. 또한 진단 패키지는 문제 해결에 필요한 정보를 수동으로 요청하고 수집하는 과정에서 발생할 수 있는 정보 불일치와 지연을 방지하여 NGINX Plus 고객과 F5 지원팀 간의 상호 작용을 더욱 효율적으로 만듭니다.
진단 패키지는 다음 정보를 수집합니다:
- NGINX 정보 – NGINX Plus 버전, 구성, 프로세스 정보, 타사 모듈, 로그, API 통계 및 엔드포인트
- 시스템 정보 – 호스트 명령어(
ps,lsof,vmstat, 기타) - 서비스 정보 –
systemd등 - NGINX Agent – 로그 및 구성(있는 경우)
- NGINX App Protect – 로그 및 구성(있는 경우)
- 지원 패키지 로그 – 수집된 모든 파일의 목록이 포함된 로그
진단 패키지를 추가한 목적은 패키지 내 스크립트가 실행하는 명령과 수집되는 데이터를 사용자에게 투명하게 공개하는 것입니다. 자세한 내용은 NGINX Plus Diagnostic Package 페이지를 참조하세요.
참고: 진단 패키지의 제공은 현재 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를 다시 확인할 필요가 없습니다. 이 업데이트 전에는 모든 업스트림에 대해 DNS 확인이 트리거되었습니다. 이 업데이트를 통해 NGINX는 모든 업스트림의 DNS 확인 결과와 만료 시간을 유지하며, 다시 로드할 때 새로 추가되거나 변경된 업스트림에 대해서만 DNS 확인을 트리거합니다.
이 최적화는 업스트림 호스트가 많은 NGINX 환경에서 가장 큰 효과를 발휘합니다. NGINX 구성에 업스트림 호스트가 100개 이상 있는 경우 최적화 효과가 가장 두드러집니다.
NGINX Open Source에서 상속된 변경 사항
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에 따르면 “효과적으로 사용하기 어려웠습니다.”) HTTP/2 서버 푸시는 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 연결의 경우, 서버 이름 표시(SNI)를 통해 선택된 가상 서버에서 HTTP/2 프로토콜이 활성화되어 있으면 애플리케이션 계층 프로토콜 협상(ALPN) 콜백에 의해 자동으로 선택됩니다.
- 이전 버전의 OpenSSL에서는 기본 가상 서버 구성을 기준으로 HTTP/2 프로토콜이 활성화됩니다.
- 일반 TCP 연결의 경우, 기본 가상 서버에서 HTTP/2가 활성화되어 있으면 이제 HTTP/2 프리페이스를 통해 HTTP/2가 자동으로 감지됩니다. 프리페이스가 일치하지 않으면 HTTP/0.9-1.1로 간주됩니다.
- 동일한 수신 소켓에서 평문 TCP를 통한 HTTP/2(h2c)와 HTTP/1.1을 지원하도록 개선되었습니다. 기존 구현에서는 사용자가 h2c 수신 소켓(예:
listen port_num http2)을 구성하면 HTTP/2 연결만 생성할 수 있습니다. h2 수신 소켓은 ALPN을 통한 프로토콜 협상을 사용하여 HTTP/1.1과 HTTP/2를 모두 지원합니다. 그러나 기존 구현에서는 HTTP/1.1 클라이언트가 해당 소켓에서 연결에 실패하므로 HTTP Upgrade를 프로토콜 협상 수단으로 사용할 수 없습니다. 이번 변경으로 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_number, 그리고ngx.worker_id. - 워커 프로세스 간에 공유되는 사전을 선언할 수 있는
js_shared_dict_zone지시어가 http 및 stream에 도입되었습니다. - ES13을 준수하는 다음 Array 메서드를 추가했습니다:
Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed(). - ES13을 준수하는 TypedArray 메서드가 추가되었습니다:
%TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed(). - 다음에 CryptoKey 속성을 추가했습니다: WebCrypto API. 추가된 속성은 다음과 같습니다:
algorithm, extractable, type, usages.
변경 사항
- 금지된 헤더에 대한 특별 처리를 제거했습니다. 이 처리는 Fetch API의 0.7.10 버전에서 도입되었습니다.
- 버전 0.5.0에서 더 이상 사용되지 않도록 지정된
r.requestBody()를 http 모듈에서 제거했습니다. 대신r.requestBuffer또는r.requestText속성을 사용해야 합니다. - 버전 0.5.0에서 더 이상 사용되지 않도록 지정된
r.responseBody()를 http 모듈에서 제거했습니다. 대신r.responseBuffer또는r.responseText속성을 사용해야 합니다. - Throwing an exception in
r.internalRedirect()에서 예외가 발생하도록 변경했습니다. 이는http모듈에서 필터링하는 동안 적용됩니다. - 네이티브 메서드에는
retval인수가 제공됩니다. 이 변경으로 인해 njs용 C 확장과의 호환성이 깨지므로 코드를 수정해야 합니다. - 표준을 준수하지 않는 더 이상 사용되지 않는 String 메서드가 제거되었습니다. 다음 메서드가 제거되었습니다:
String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encoding). - GNU readline을 사용한 빌드 지원이 제거되었습니다.
버그 수정
- 수정했습니다.
r.status의 setter가http모듈에서 필터링할 때 올바르게 작동하도록 - Fixed setting of
Location헤더가http모듈에서 올바르게 설정되지 않던 문제를 수정했습니다. - 반환값 수정:
сrypto.getRandomValues(). - 함수 표현식이 포함된 계산된 속성 이름의 평가 문제를 수정했습니다.
- 배열에 선언된 함수 표현식의 암시적 이름을 수정했습니다.
- for-in 루프의 구문 분석 문제를 수정했습니다.
- 수정:
Date.parse()에서 ISO-8601 형식 및 UTC 시간 오프셋을 올바르게 처리하도록 했습니다.
모든 기능, 변경 사항 및 버그 수정에 대한 전체 목록은 njs 변경 사항 로그를 참조하세요.
NGINX Plus 업그레이드 또는 체험
NGINX Plus를 사용 중이라면 가능한 한 빨리 NGINX Plus R30으로 업그레이드하시기를 적극 권장합니다. 뛰어난 새로운 기능뿐만 아니라 여러 추가 수정 사항과 개선 사항도 적용되며, 최신 버전을 유지하면 지원 티켓을 제출해야 할 때 NGINX가 더 원활하게 지원해 드릴 수 있습니다.
아직 NGINX Plus를 사용해 보지 않으셨다면 지금 확인해 보시기 바랍니다. 보안, 부하 분산 및 API 게이트웨이 용도로 활용하거나, 향상된 모니터링 및 관리 API를 갖춘 완전한 지원이 제공되는 웹 서버로 사용할 수 있습니다. 지금 바로 30일 무료 체험을 시작해 보세요.
관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.