NGINX Plus 릴리스 21(R21)이 출시되어 기쁩니다. NGINX 오픈 소스를 기반으로 하는 NGINX Plus는 로드 밸런서, 콘텐츠 캐시, 웹 서버 및 API 게이트웨이를 모두 갖춘 유일한 제품입니다. 4억 5천만 개가 넘는 웹사이트가 NGINX를 사용하고 있으며 , NGINX Plus R21은 그 어느 때보다 더 안정적이고 보안성이 강화되었으며, 주로 NGINX 오픈 소스의 버그 수정과 안정성 개선 에 중점을 두었습니다.
NGINX Plus R21 의 새로운 기능은 다음과 같습니다.
호스트
헤더가 포함된 클라이언트 요청을 허용하지 않습니다.효율적인 소프트웨어와 코드 품질은 오픈 소스와 NGINX Plus를 포함한 NGINX를 구축하는 방법의 핵심 원칙입니다.
NGINX 팀은 상용 소프트웨어에 기대하는 모든 최신 CI/CD 및 자동화 테스트 도구를 활용합니다. 매일 테스트 활성 개발 브랜치의 경우 1000줄의 코드당 결함이 0.01개에 불과해 놀라울 정도로 낮은 '결함 밀도'를 보이는데, 이는 비슷한 크기의 코드베이스의 1000줄당 결함 평균 밀도인 0.7개와 비교됩니다.
또한 오픈 소스와 NGINX Plus 구성 요소 모두에 대한 외부 및 독립적인 침투 테스트와 코드 검토를 의뢰합니다. 최근의 침투 테스트와 코드 검토에서 몇 가지 문제가 확인되었으며, 이번 릴리스에서 이 문제가 해결되었습니다.
NGINX Plus R21 에는 총 14개의 버그에 대한 수정 사항이 포함되어 있습니다.
aio
지시어에서 하위 요청을 사용할 때 소켓 누수 발생494
대신 반환되었습니다400
코드에 오류가 있을 때494
error_page
지시문으로 리디렉션되었습니다.다시
쓰기 지시문이 포함된 경우 시작 시 또는 재구성 중에 세그먼테이션 오류가 발생할 수 있습니다.break
지시문이 alias
지시문과 함께 사용되거나 URI가 있는 proxy_pass
지시문과 함께 사용되는 경우 작업자 프로세스에서 세그먼테이션 오류가 발생할 수 있습니다.Transfer-Encoding
요청 헤더만 처리되었습니다.위치
응답 헤더 줄에 가비지가 포함될 수 있습니다.error_page
지시문으로 리디렉션을 반환할 때 본문이 포함된 요청이 잘못 처리되었습니다.debug_points
지시문에 버그가 있습니다.이러한 버그는 모두 심각한 것이 아니며 연관된 CVE 기록도 없습니다.
본 출시 시점에 저희는 2020년 로드맵을 개발하기 위해 열심히 노력하고 있습니다. 올해 말에 HTTP/3 (일명 QUIC)의 프로덕션 수준 구현을 공개할 예정입니다. 이 기술을 따라가거나 테스트하는 데 관심이 있다면 앞으로 몇 주 안에 실험적 패치가 나올지 주목하세요.
NGINX Plus R15는 업스트림 그룹에 대한 gRPC 트래픽의 라우팅 및 부하 분산에 대한 지원을 도입했습니다. grpc_pass
지시어를 포함하여 NGINX Plus를 활용하여 gRPC 트래픽을 라우팅할 수 있습니다.
NGINX Plus R21은 grpc_pass
지시문에서 변수 지원을 도입하여 gRPC 워크로드까지 확장되는 동적인 API 기반 라우팅 정책을 제공합니다. 이를 통해 다음과 같은 사용 사례를 충족할 수 있습니다.
다음 구성은 디버그 라우팅의 샘플 구현입니다.
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 모듈(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 R21 로 업그레이드하실 것을 적극 권장합니다. 또한 여러 가지 추가적인 수정 사항과 개선 사항을 얻을 수 있으며, 지원 티켓을 제출해야 할 때 NGINX에서 도움을 주는 데 도움이 됩니다.
업그레이드를 진행하기 전에 이 블로그 게시물에 설명된 새로운 기능 과 동작의 변경 사항 을 주의 깊게 검토하세요.
NGINX Plus를 사용해보지 않으셨다면 보안, 부하 분산, API 게이트웨이로 사용하거나 향상된 모니터링 및 관리 API를 갖춘 완벽히 지원되는 웹 서버로 사용해보시기 바랍니다. 오늘 무료 30일 체험판을 통해 시작해 보세요. NGINX Plus가 어떻게 귀하의 애플리케이션을 제공하고 확장하는 데 도움이 될 수 있는지 직접 확인해 보세요.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."