NGINX Plus Release 21(R21) 이 출시되어 기쁩니다 . NGINX Open Source를 기반으로 하는 NGINX Plus는 유일한 올인원 로드 밸런서, 콘텐츠 캐시, 웹 서버 및 API 게이트웨이입니다. 4억 5천만 개가 넘는 웹사이트가 NGINX에 의존하고 있는 상황 에서 NGINX Plus R21은 그 어느 때보다 더 안정적이고 보안성이 뛰어나며, 주로 NGINX Open Source의 버그 수정 및 안정성 개선 에 중점을 두고 있습니다 .
NGINX Plus R21 의 새로운 기능은 다음과 같습니다.
- 동적 gRPC 프록싱 – gRPC 연결을 백엔드 gRPC 서비스에 전달할 때 가변 지원을 추가했습니다. 이를 통해 클라이언트 속성에 따라 gRPC 연결을 서비스 그룹으로 동적으로 라우팅할 수 있습니다.
- NGINX JavaScript 모듈 개선 – NGINX JavaScript 모듈(njs)이 0.3.9 버전으로 업데이트되었으며, 여러 버그가 수정되었고 하위 요청 및 파일 시스템 지원과 관련된 추가 기능이 향상되었습니다.
행동의 중요한 변화
- 허용 가능한 요청 – RFC 7230 에 따라 NGINX Plus는 더 이상 여러 Host헤더가 있는 클라이언트 요청을 허용하지 않습니다.
- 지원되는 새로운 운영 체제 – 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대신 상태 코드가 반환되었습니다.400494error_page
- SSL 연결에서 파이프라인 요청을 처리하는 동안 시간 초과가 발생할 수 있습니다.
- OCSP 스테이플링을 사용한 경우 작업자 프로세스에서 세그먼테이션 오류가 발생할 수 있습니다.
- 구성에 rewrite빈 대체 문자열이 포함된 지시문이 포함된 경우 시작 시 또는 재구성 중에 세그먼테이션 오류가 발생할 수 있습니다.
- break지시문이 지시문과 함께 사용되거나 URI가 있는 지시문 alias과 함께 사용되는 경우 작업자 프로세스에서 세그먼테이션 오류가 발생할 수 있습니다 .proxy_pass
- 첫 번째 Transfer-Encoding요청 헤더만 처리되었습니다.
- Location요청 URI가 null 문자를 포함하는 URI로 다시 작성된 경우 응답 헤더 줄에 가비지가 포함될 수 있습니다 .
- error_page지시문 으로 리디렉션을 반환할 때 본문이 포함된 요청이 잘못 처리되었습니다.
- debug_pointsHTTP/2 사용 시 지시문 버그
이러한 버그는 모두 심각한 것이 아니며 연관된 CVE 기록도 없습니다.
NGINX Plus 로드맵에 투자하기
이 릴리스 시점에 우리는 2020 로드맵에 열심히 노력하고 있습니다. 올해 말에 HTTP/3 (일명 QUIC)의 프로덕션 등급 구현을 제공할 예정입니다. 이 기술을 따르거나 테스트하는 데 관심이 있다면 앞으로 몇 주 동안 실험적 패치를 주시하세요.
새로운 기능에 대한 자세한 정보
동적 gRPC 프록싱
NGINX Plus R15는 업스트림 그룹으로의 gRPC 트래픽 라우팅 및 로드 밸런싱 지원을 도입했습니다. NGINX Plus를 활용하여 지시문을 포함하여 gRPC 트래픽을 라우팅할 수 있습니다grpc_pass.
NGINX Plus R21은 gRPC 워크로드로 확장되는 동적 API 기반 라우팅 정책을 제공하기 위해 지시문 에 가변 지원을 도입합니다 grpc_pass. 이를 통해 다음과 같은 사용 사례를 충족할 수 있습니다.
- A/B 테스트 – gRRC 요청을 여러 업스트림에 통계적으로 분산하여 어느 업스트림의 성능이 더 좋은지 확인합니다.
- 디버그 라우팅 – 트래픽을 프로덕션 gRPC 서비스로 라우팅하지만 특정 속성(소스 IP 주소, gRPC 메타데이터)이 있는 요청은 디버그 gRPC 서비스로 라우팅합니다.
다음 구성은 디버그 라우팅의 샘플 구현입니다.
1번째 줄에서 네트워크 범위를 키로 사용할 수 있는 키-값 저장소를 정의합니다 (매개변수로 활성화 ). 2번째 줄에서는 변수가 grpc-greeter 키-값 저장소 에서 조회를 수행하여 평가되고 클라이언트 IP 주소( )를 키로 사용한다고 type=ip지정합니다 .$greeter_upstream$remote_addr
10번째 줄에서는 클라이언트의 IP 서브넷을 기반으로 하는 gRPC 요청의 TLS 종료 및 동적 라우팅을 지시문 grpc://$greeter_upstream의 매개변수로 지정합니다.grpc_pass
예를 들어, 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-greetergRPC 트래픽을 프로덕션 서비스 그룹( 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 토큰 내성입니다 . 이 릴리스는 하위 요청에 대한 두 가지 중요한 개선 사항인 약속과 분리된 하위 요청을 제공합니다.
약속
하위 요청은 일반적으로 하위 요청의 응답을 처리하는 콜백 함수를 포함합니다. 이제 JavaScript 약속을 사용하여 호출 코드와 함께 응답을 처리하는 방식으로 콜백 함수를 생략할 수 있습니다. 다음 예는 콜백을 사용하지 않고도 연속적인 하위 요청을 단일 코드 시퀀스로 연결하는 방법을 보여줍니다.
분리된 하위 요청
하위 요청은 비동기적이며 이전에는 지시문에서 호출해야 했습니다 js_content. 이제 하위 요청은 변수 평가 중에 지시문에서 트리거될 수도 있습니다 js_set. 이러한 "분리된" 하위 요청은 여전히 비동기적으로 작동하지만 호출 함수에 데이터를 반환하지 않으며 모든 응답은 무시됩니다.
다음 샘플 코드는 교환되는 총 데이터 양이 1MB를 초과하는 경우 분리된 하위 요청을 사용하여 보안 정보 및 이벤트 관리( SIEM ) 시스템 에 요청 헤더 사본을 전송합니다 .
그런 다음 액세스 로그를 작성할 때 변수 평가를 요청하여 로그 단계에서 JavaScript 코드가 실행됩니다.
파일 시스템
JavaScript 파일 시스템 객체는 fs비동기 작업에 대한 약속을 지원하도록 향상되었습니다. 또한 새로운 파일 시스템 메서드가 있습니다: access(), realpath(), symlink(), 및 unlink().
NGINX Plus Release 21(R21) 이 출시되어 기쁩니다 . NGINX Open Source를 기반으로 하는 NGINX Plus는 유일한 올인원 로드 밸런서, 콘텐츠 캐시, 웹 서버 및 API 게이트웨이입니다. 4억 5천만 개가 넘는 웹사이트가 NGINX에 의존하고 있는 상황 에서 NGINX Plus R21은 그 어느 때보다 더 안정적이고 보안성이 뛰어나며, 주로 NGINX Open Source의 버그 수정 및 안정성 개선 에 중점을 두고 있습니다 .
NGINX Plus R21 의 새로운 기능은 다음과 같습니다.
행동의 중요한 변화
품질에 투자하다
효율적인 소프트웨어와 코드 품질은 오픈 소스와 NGINX Plus를 포함한 NGINX를 구축하는 방법의 핵심 원칙입니다.
NGINX 팀은 모든 상용 소프트웨어에서 기대하는 모든 최신 CI/CD 및 자동화된 테스트 도구를 사용합니다. 활성 개발 브랜치의 일일 테스트는 1000줄의 코드당 0.01개의 결함이라는 놀라울 정도로 낮은 "결함 밀도"를 보여주는데, 비슷한 크기의 코드베이스의 경우 1000줄당 0.7개의 결함이라는 평균 밀도와 비교됩니다.
또한 오픈 소스와 NGINX Plus 구성 요소 모두에 대한 외부 및 독립적인 침투 테스트와 코드 검토를 의뢰합니다. 이러한 침투 테스트와 코드 검토 중 가장 최근의 테스트에서 이 릴리스에서 다루는 몇 가지 문제가 확인되었습니다.
버그 수정
NGINX Plus R21 에는 총 14개의 버그에 대한 수정 사항이 포함되어 있습니다.
이러한 버그는 모두 심각한 것이 아니며 연관된 CVE 기록도 없습니다.
NGINX Plus 로드맵에 투자하기
이 릴리스 시점에 우리는 2020 로드맵에 열심히 노력하고 있습니다. 올해 말에 HTTP/3 (일명 QUIC)의 프로덕션 등급 구현을 제공할 예정입니다. 이 기술을 따르거나 테스트하는 데 관심이 있다면 앞으로 몇 주 동안 실험적 패치를 주시하세요.
새로운 기능에 대한 자세한 정보
동적 gRPC 프록싱
NGINX Plus R15는 업스트림 그룹으로의 gRPC 트래픽 라우팅 및 로드 밸런싱 지원을 도입했습니다. NGINX Plus를 활용하여 지시문을 포함하여 gRPC 트래픽을 라우팅할 수 있습니다grpc_pass.
NGINX Plus R21은 gRPC 워크로드로 확장되는 동적 API 기반 라우팅 정책을 제공하기 위해 지시문 에 가변 지원을 도입합니다 grpc_pass. 이를 통해 다음과 같은 사용 사례를 충족할 수 있습니다.
다음 구성은 디버그 라우팅의 샘플 구현입니다.
1번째 줄에서 네트워크 범위를 키로 사용할 수 있는 키-값 저장소를 정의합니다 (매개변수로 활성화 ). 2번째 줄에서는 변수가 grpc-greeter 키-값 저장소 에서 조회를 수행하여 평가되고 클라이언트 IP 주소( )를 키로 사용한다고 type=ip지정합니다 .$greeter_upstream$remote_addr
10번째 줄에서는 클라이언트의 IP 서브넷을 기반으로 하는 gRPC 요청의 TLS 종료 및 동적 라우팅을 지시문 grpc://$greeter_upstream의 매개변수로 지정합니다.grpc_pass
예를 들어, 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-greetergRPC 트래픽을 프로덕션 서비스 그룹( 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-greeterNGINX JavaScript 모듈의 향상
NGINX JavaScript 모듈(njs)이 여러 버그 수정과 하위 요청 및 파일 시스템 지원과 관련된 일부 기능 향상을 통해 버전 0.3.9 로 업데이트되었습니다 .
하위 요청
이 r.subrequest함수는 njs 코드가 모든 URI에 비동기 HTTP 요청을 할 수 있도록 합니다. 여기에는 여러 가지 사용 사례가 있으며, 주목할 만한 예 중 하나는 외부 인증 서버에 대한 API 호출, 예를 들어 OAuth 2.0 토큰 내성입니다 . 이 릴리스는 하위 요청에 대한 두 가지 중요한 개선 사항인 약속과 분리된 하위 요청을 제공합니다.
약속
하위 요청은 일반적으로 하위 요청의 응답을 처리하는 콜백 함수를 포함합니다. 이제 JavaScript 약속을 사용하여 호출 코드와 함께 응답을 처리하는 방식으로 콜백 함수를 생략할 수 있습니다. 다음 예는 콜백을 사용하지 않고도 연속적인 하위 요청을 단일 코드 시퀀스로 연결하는 방법을 보여줍니다.
분리된 하위 요청
하위 요청은 비동기적이며 이전에는 지시문에서 호출해야 했습니다 js_content. 이제 하위 요청은 변수 평가 중에 지시문에서 트리거될 수도 있습니다 js_set. 이러한 "분리된" 하위 요청은 여전히 비동기적으로 작동하지만 호출 함수에 데이터를 반환하지 않으며 모든 응답은 무시됩니다.
다음 샘플 코드는 교환되는 총 데이터 양이 1MB를 초과하는 경우 분리된 하위 요청을 사용하여 보안 정보 및 이벤트 관리( SIEM ) 시스템 에 요청 헤더 사본을 전송합니다 .
그런 다음 액세스 로그를 작성할 때 변수 평가를 요청하여 로그 단계에서 JavaScript 코드가 실행됩니다.
파일 시스템
JavaScript 파일 시스템 객체는 fs비동기 작업에 대한 약속을 지원하도록 향상되었습니다. 또한 새로운 파일 시스템 메서드가 있습니다: access(), realpath(), symlink(), 및 unlink().
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기