블로그 | NGINX

NGINX Plus R21 발표

NGINX-F5-수평-검정-유형-RGB의 일부
리엄 크릴리 썸네일
리암 크릴리
2020년 4월 7일 게시

NGINX Plus 릴리스 21(R21)이 출시되어 기쁩니다. NGINX 오픈 소스를 기반으로 하는 NGINX Plus는 로드 밸런서, 콘텐츠 캐시, 웹 서버 및 API 게이트웨이를 모두 갖춘 유일한 제품입니다. 4억 5천만 개가 넘는 웹사이트가 NGINX를 사용하고 있으며 , NGINX Plus R21은 그 어느 때보다 더 안정적이고 보안성이 강화되었으며, 주로 NGINX 오픈 소스의 버그 수정과 안정성 개선 에 중점을 두었습니다.

NGINX Plus R21 의 새로운 기능은 다음과 같습니다.

  • 동적 gRPC 프록싱 – 백엔드 gRPC 서비스에 gRPC 연결을 전달할 때 변수 지원을 추가했습니다. 이를 통해 클라이언트 속성에 따라 서비스 그룹에 gRPC 연결을 동적으로 라우팅할 수 있습니다.
  • NGINX JavaScript 모듈 개선 – NGINX JavaScript 모듈(njs)이 0.3.9 버전으로 업데이트되었으며, 여러 버그가 수정되었고 하위 요청 및 파일 시스템 지원과 관련된 추가 기능이 향상되었습니다.

행동의 중요한 변화

  • 허용 가능한 요청RFC 7230 에 따라 NGINX Plus는 더 이상 여러 호스트 헤더가 포함된 클라이언트 요청을 허용하지 않습니다.
  • 지원되는 새로운 운영 체제 – Alpine Linux 3.11.
  • 더 이상 지원되지 않는 이전 운영 체제 – 32비트 플랫폼(i386 아키텍처).

품질에 투자하다

효율적인 소프트웨어와 코드 품질은 오픈 소스와 NGINX Plus를 포함한 NGINX를 구축하는 방법의 핵심 원칙입니다.

NGINX 팀은 상용 소프트웨어에 기대하는 모든 최신 CI/CD 및 자동화 테스트 도구를 활용합니다. 매일 테스트 활성 개발 브랜치의 경우 1000줄의 코드당 결함이 0.01개에 불과해 놀라울 정도로 낮은 '결함 밀도'를 보이는데, 이는 비슷한 크기의 코드베이스의 1000줄당 결함 평균 밀도인 0.7개와 비교됩니다.

또한 오픈 소스와 NGINX Plus 구성 요소 모두에 대한 외부 및 독립적인 침투 테스트와 코드 검토를 의뢰합니다. 최근의 침투 테스트와 코드 검토에서 몇 가지 문제가 확인되었으며, 이번 릴리스에서 이 문제가 해결되었습니다.

버그 수정

NGINX Plus R21 에는 총 14개의 버그에 대한 수정 사항이 포함되어 있습니다.

  • HTTP/2를 사용할 때 소켓 누수(두 개의 별도 버그)
  • njs 모듈과 aio 지시어에서 하위 요청을 사용할 때 소켓 누수 발생
  • WebDav 모듈에서 잠재적인 메모리 고갈
  • MP4 모듈에서의 잠재적 메모리 공개
  • 상태 코드494 대신 반환되었습니다400 코드에 오류가 있을 때494 error_page 지시문으로 리디렉션되었습니다.
  • SSL 연결에서 파이프라인 요청을 처리하는 동안 시간 초과가 발생할 수 있습니다.
  • OCSP 스테이플링을 사용한 경우 작업자 프로세스에서 세그먼테이션 오류가 발생할 수 있습니다.
  • 구성에 빈 대체 문자열이 포함된 다시 쓰기 지시문이 포함된 경우 시작 시 또는 재구성 중에 세그먼테이션 오류가 발생할 수 있습니다.
  • break 지시문이 alias 지시문과 함께 사용되거나 URI가 있는 proxy_pass 지시문과 함께 사용되는 경우 작업자 프로세스에서 세그먼테이션 오류가 발생할 수 있습니다.
  • 첫 번째 Transfer-Encoding 요청 헤더만 처리되었습니다.
  • 요청 URI가 null 문자를 포함하는 URI로 다시 작성된 경우 위치 응답 헤더 줄에 가비지가 포함될 수 있습니다.
  • error_page 지시문으로 리디렉션을 반환할 때 본문이 포함된 요청이 잘못 처리되었습니다.
  • HTTP/2를 사용할 때 debug_points 지시문에 버그가 있습니다.

이러한 버그는 모두 심각한 것이 아니며 연관된 CVE 기록도 없습니다.

NGINX Plus 로드맵에 투자하기

본 출시 시점에 저희는 2020년 로드맵을 개발하기 위해 열심히 노력하고 있습니다. 올해 말에 HTTP/3 (일명 QUIC)의 프로덕션 수준 구현을 공개할 예정입니다. 이 기술을 따라가거나 테스트하는 데 관심이 있다면 앞으로 몇 주 안에 실험적 패치가 나올지 주목하세요.

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

동적 gRPC 프록싱

NGINX Plus R15는 업스트림 그룹에 대한 gRPC 트래픽의 라우팅 및 부하 분산에 대한 지원을 도입했습니다. grpc_pass 지시어를 포함하여 NGINX Plus를 활용하여 gRPC 트래픽을 라우팅할 수 있습니다.

NGINX Plus R21은 grpc_pass 지시문에서 변수 지원을 도입하여 gRPC 워크로드까지 확장되는 동적인 API 기반 라우팅 정책을 제공합니다. 이를 통해 다음과 같은 사용 사례를 충족할 수 있습니다.

  • A/B 테스트 – gRRC 요청을 여러 업스트림에 통계적으로 분산하여 어느 업스트림의 성능이 더 좋은지 확인합니다.
  • 디버그 라우팅 – 트래픽을 프로덕션 gRPC 서비스로 라우팅하지만 특정 속성(소스 IP 주소, gRPC 메타데이터)이 있는 요청은 디버그 gRPC 서비스로 라우팅합니다.

다음 구성은 디버그 라우팅의 샘플 구현입니다.

1번째 줄에서는 네트워크 범위를 키로 사용할 수 있는 키-값 저장소를 정의합니다( type=ip 매개변수로 활성화). 2번째 줄에서는 grpc-greeter 키‑값 저장소에서 조회를 수행하여 클라이언트 IP 주소( $remote_addr )를 키로 사용하여 $greeter_upstream 변수가 평가되도록 지정합니다.

10번째 줄에서 grpc_pass 지시어의 매개변수로 grpc://$greeter_upstream을 지정하여 TLS 종료와 클라이언트의 IP 서브넷을 기반으로 하는 gRPC 요청의 동적 라우팅을 수행합니다.

예를 들어, NGINX Plus 인스턴스에서 다음 명령을 실행하면 192.168.80.0/24 서브넷에서 발생하는 요청을 grpc-servers-greeter-debug 로 라우팅할 수 있습니다.

$ curl -iX POST -d '{"192.168.80.0/24":"grpc-servers-greeter-debug"}' http://localhost:8080/api/6/http/keyvals/grpc-greeter

gRPC 트래픽을 프로덕션 서비스 그룹( grpc-servers-greeter-prod )으로 전환하려면 다음 명령을 실행하세요.

$ curl -iX PATCH -d '{"192.168.80.0/24":"grpc-servers-greeter-prod"}' https://localhost:8080/api/6/http/keyvals/grpc-greeter

NGINX JavaScript 모듈의 향상

NGINX JavaScript 모듈(njs)이 여러 버그 수정과 하위 요청 및 파일 시스템 지원과 관련된 일부 기능 향상을 통해 버전 0.3.9 로 업데이트되었습니다.

하위 요청

r.subrequest 함수는 njs 코드가 모든 URI에 비동기 HTTP 요청을 할 수 있도록 합니다. 여기에는 여러 가지 사용 사례가 있으며, 주목할 만한 예 중 하나는 외부 인증 서버에 대한 API 호출(예: OAuth 2.0 토큰 내성) 입니다. 이 릴리스에서는 하위 요청에 대해 약속과 분리된 하위 요청이라는 두 가지 중요한 개선 사항이 적용되었습니다.

[ 편집자 - 다음 두 가지 샘플 사용 사례는 NGINX JavaScript 모듈의 여러 사례 중 일부에 불과합니다. 전체 목록은 NGINX JavaScript 모듈의 사용 사례를 참조하세요.

약속

하위 요청에는 일반적으로 하위 요청의 응답을 처리하는 콜백 함수가 포함됩니다. 이제 JavaScript 약속을 사용하여 호출 코드에 맞춰 응답을 처리함으로써 콜백 함수를 생략할 수 있습니다. 다음 예제는 콜백을 사용하지 않고 연속적인 하위 요청을 단일 코드 시퀀스로 연결하는 방법을 보여줍니다.

분리된 하위 요청

하위 요청은 비동기적으로 이루어지며, 이전에는 js_content 지시문에서 호출해야 했습니다. 이제 변수 평가 중에 js_set 지시어에서도 하위 요청을 트리거할 수 있습니다. 이러한 "분리된" 하위 요청은 여전히 비동기적으로 작동하지만 호출 함수에 데이터를 반환하지 않으며 모든 응답은 무시됩니다.

다음 샘플 코드는 교환되는 총 데이터 양이 1MB를 초과하는 경우 보안 정보 및 이벤트 관리( SIEM ) 시스템에 요청 헤더 사본을 전송하기 위해 분리된 하위 요청을 사용합니다.

[편집자 – 다음 구성이 업데이트되어 다음을 사용할 수 있습니다. js_import 지시문은 이를 대체함 js_포함 지시문에 NGINX 플러스 R23<.htmla>. 자세한 내용은 NGINX JavaScript 모듈 의 참조 문서를 참조하세요. 예제 구성 섹션에서는 NGINX 구성 및 JavaScript 파일에 대한 올바른 구문을 보여줍니다.]

그런 다음 액세스 로그를 작성할 때 변수 평가를 요청하여 로그 단계에서 JavaScript 코드가 실행됩니다.

파일 시스템

JavaScript 파일 시스템 객체 fs가 비동기 작업에 대한 약속을 지원하도록 향상되었습니다. 추가로 access() , realpath() , symlink() , unlink() 라는 새로운 파일 시스템 메서드가 있습니다.

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

NGINX Plus를 사용하고 계시다면 가능한 한 빨리 NGINX Plus R21 로 업그레이드하실 것을 적극 권장합니다. 또한 여러 가지 추가적인 수정 사항과 개선 사항을 얻을 수 있으며, 지원 티켓을 제출해야 할 때 NGINX에서 도움을 주는 데 도움이 됩니다.

업그레이드를 진행하기 전에 이 블로그 게시물에 설명된 새로운 기능동작의 변경 사항 을 주의 깊게 검토하세요.

NGINX Plus를 사용해보지 않으셨다면 보안, 부하 분산, API 게이트웨이로 사용하거나 향상된 모니터링 및 관리 API를 갖춘 완벽히 지원되는 웹 서버로 사용해보시기 바랍니다. 오늘 무료 30일 체험판을 통해 시작해 보세요. NGINX Plus가 어떻게 귀하의 애플리케이션을 제공하고 확장하는 데 도움이 될 수 있는지 직접 확인해 보세요.


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