NGINX Plus 릴리스 30(R30)이 출시되어 기쁩니다. NGINXPlus는 NGINX 오픈 소스를 기반으로 하는 유일한 올인원 소프트웨어 웹 서버, 로드 밸런서, 역방향 프록시, 콘텐츠 캐시 및 API 게이트웨이입니다.
NGINX Plus R30의 새롭고 향상된 기능은 다음과 같습니다.
이번 릴리스의 핵심은 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 켜짐;
이전 버전의 NGINX Plus는 Amazon Linux 2 EPEL 저장소의 "libmaxminddb" 라이브러리를 사용하여 GeoIP2 모듈을 빌드했습니다. EPEL 저장소는 더 이상 이 라이브러리를 제공하지 않으며 Amazon Linux 2 배포판에서 기본적으로 액세스할 수도 없습니다. 따라서 Amazon Linux 2에 맞게 빌드할 수 있는 실행 가능한 방법이 없으므로 해당 모듈은 NGINX Plus R30에서 더 이상 사용할 수 없습니다.
MQTT 메시지를 구성하는 버퍼 크기를 지정하는 데 사용되는 mqtt_rewrite_buffer_size
지시어는 mqtt_buffers
지시어로 대체되었습니다. 새로운 지침을 사용하면 연결당 할당할 수 있는 버퍼 수를 지정할 수 있고 각 버퍼의 크기도 지정할 수 있습니다.
NGINX Plus API의 버전 번호는 Per-Worker Connection Telemetry 에서 설명된 작업자별 메트릭 추가를 반영하여 8에서 9로 업데이트되었습니다. 이전 버전 번호는 계속 작동하지만 이후 API 버전에서 추가된 메트릭은 출력에 포함되지 않습니다.
지원되는 새로운 운영 체제:
제거된 이전 운영 체제:
NGINX Plus R31에서 더 이상 지원되지 않고 제거될 예정인 이전 운영 체제:
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 환경에서 문제를 해결하는 데 필요한 데이터를 수집하는 프로세스를 간소화합니다. 진단 패키지는 문제 해결에 필요한 정보를 수동으로 요청하고 수집하는 데 따른 불일치와 지연을 방지하는 데 도움이 되므로 NGINX Plus 고객과 F5 지원 팀 간의 상호 작용을 보다 효율적으로 만들어줍니다.
진단 패키지는 다음을 수집합니다.
ps
, lsof
, vmstat
등)systemd
등진단 패키지를 추가한 목적은 패키지 내 스크립트가 어떤 명령을 실행하는지, 어떤 데이터를 수집하는지 사용자에게 투명하게 알리는 것입니다. 자세한 내용은 NGINX Plus 진단 패키지 페이지를 참조하세요.
메모: 진단 패키지는 현재 NGINX Plus R30 릴리스의 일부로 출시될 예정이라고 발표되었지만, 진단 패키지는 실제로 릴리스와 무관합니다. 앞으로는 여러분과 F5 지원팀의 피드백을 토대로 문제 해결 데이터 수집 프로세스를 개선하고자 업데이트할 계획입니다.
MQTT(Message Queuing Telemetry Transport) 필터 모듈의 메모리 소비가 개선되어 처리량이 4~5배 증가했습니다.
mqtt_rewrite_buffer_size
지시어가 제거되었습니다. 대신, 새로운 지침 mqtt_buffers <숫자> <크기>
모듈이 연결당 할당할 수 있는 버퍼의 수와 각 버퍼의 크기를 지정하기 위해 도입되었습니다. 버퍼의 기본 개수는 100이고 각 버퍼의 기본 크기는 1024바이트입니다. 따라서 mqtt_buffers 변수의 기본값은 <100> <1024>가
됩니다.
NGINX Plus는 이제 재로드 시 동적으로 확인된 업스트림 호스트의 DNS 이름 만료 시간을 보존하므로 구성 재로드 시 재확인이 필요 없습니다. 이 업데이트 이전에는 모든 업스트림에 대해 DNS 확인이 트리거되었습니다. 이 업데이트를 적용하면 NGINX는 모든 업스트림에 대한 DNS 확인 및 만료 시간을 보존하고 다시 로드할 때 새롭거나 변경된 업스트림에 대해서만 DNS 확인을 트리거합니다.
이러한 최적화는 많은 수의 업스트림 호스트가 포함된 NGINX 환경에 가장 큰 영향을 미칩니다. NGINX 구성에 업스트림 호스트가 100개 이상 있는 경우 최적화 효과가 가장 두드러집니다.
NGINX Plus R30은 NGINX Open Source 1.25.1을 기반으로 하며 NGINX Plus R29가 출시된 이후(NGINX 1.25.0 및 1.25.1) 기능 변경, 특징 및 버그 수정을 계승했습니다.
server_push는
채택이 최소화되었고 매우 제한적인 사용 사례에서만 사용할 수 있었습니다. (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
지시어를 사용하는 것이 좋습니다.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_
변수를 평가하는 논리의 결함으로 인해 특정 요소가 지워졌지만 연결 목록에 남아 있는 경우 버퍼 오버런이 발생할 가능성이 있습니다. 이 문제는 타사 모듈을 사용하여 다중 헤더 값을 재정의할 때 나타났습니다. 이 업데이트에서는 정교한 경계 검사가 도입되어 이러한 변수를 더 안전하게 처리하고 평가할 수 있습니다.quic_mtu
지시어가 제거되었습니다.listen 지시문의 http3 매개변수가
제거되었습니다.하는 세그폴트를
수정했습니다.최근 릴리스에서 상속받은 새로운 변경 사항, 기능, 버그 수정 및 해결 방법의 전체 목록을 보려면 NGINX CHANGES 파일을 참조하세요.
NGINX Plus R30은 NGINX JavaScript(njs) 모듈 버전 0.8.0의 변경 사항을 통합했습니다.
ngx.build , ngx.conf_file_path , ngx.error_log_path , ngx.prefix , ngx.version , ngx.version_number
및 ngx.worker_id
.js_shared_dict_zone
지시어를 도입했습니다.Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed()
.%TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed()
.algorithm, extractable, type, usages
.r.requestBody()를
http 모듈에서 제거했습니다. 대신 r.requestBuffer
또는 r.requestText
속성을 사용해야 합니다.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(인코딩)
.http
모듈에서 필터링할 때 r.status
세터를 고정했습니다.http
모듈의 Location
헤더 설정이 고정되었습니다.сrypto.getRandomValues()
의 retval을 고정했습니다.Date.parse()를
고정했습니다.모든 기능, 변경 사항 및 버그 수정의 포괄적인 목록을 보려면 njs 변경 로그를 참조하세요.
NGINX Plus를 실행 중이라면 가능한 한 빨리 NGINX Plus R30으로 업그레이드하는 것을 적극 권장합니다. 모든 훌륭한 새로운 기능 외에도 여러 가지 추가 수정 사항과 개선 사항을 얻을 수 있으며, 최신 상태를 유지하면 지원 티켓을 제출해야 할 경우 NGINX에서 도움을 드릴 수 있습니다.
NGINX Plus를 사용해보지 않으셨다면, 꼭 확인해보시기 바랍니다. 보안, 부하 분산 및 API 게이트웨이 사용 사례에 사용하거나 향상된 모니터링 및 관리 API를 갖춘 완벽히 지원되는 웹 서버로 사용할 수 있습니다. 오늘 무료 30일 체험판을 시작해 보세요.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."