블로그 | NGINX

NGINX Plus R19 발표

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


NGINX Plus 릴리스 19(R19)가 출시되어 기쁩니다. NGINX Plus는 로드 밸런서, 콘텐츠 캐시, 웹 서버 및 API 게이트웨이를 모두 갖춘 유일한 제품입니다. NGINX 오픈 소스를 기반으로 하는 NGINX Plus에는 독점적인 향상된 기능과 수상 경력에 빛나는 지원이 포함되어 있습니다. 이 릴리스의 주된 초점은 모니터링이며, 더 세부적이고 유연한 새로운 기능을 통해 대규모 애플리케이션의 안정성을 향상시킵니다.

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

  • 보다 유연한 모니터링 – NGINX Plus 생태계에 대한 보다 세부적인 통찰력과 보다 쉬운 분석을 위한 새로운 기능이 추가되었습니다. 여기에는 위치 블록에 대한 별도의 메트릭 수집 옵션, DNS 조회 활동에 대한 새로운 메트릭, Prometheus 형식과 JSON으로 내보내기 지원이 포함됩니다. NGINX Plus 대시보드에는 새로운 위치별 메트릭이 표시되고 DNS 메트릭과 NGINX Plus 클러스터에 대한 메트릭을 위한 새로운 탭이 추가되었습니다.
  • 속도 제한 테스트를 위한 드라이런 모드 – 프로덕션 트래픽에 대한 올바른 속도 제한을 설정하는 것은 어렵고 매우 위험합니다. 잘못 설정하면 많은 사용자의 사용자 경험에 심각한 영향을 미칠 수 있습니다. 새로운 시험 실행 모드를 사용하면 실제로 속도 제한을 적용하지 않고도 프로덕션 트래픽에 대한 속도 제한의 효과를 이해할 수 있습니다.
  • 키-값 저장소 향상 – 이제 개별 주소와 함께 키-값 저장소에 IP 주소 범위를 저장하고 개별 항목에 만료 시간을 설정할 수 있습니다.
  • 동적 대역폭 제어 – 대역폭 제한을 구성할 때 이제 속도를 변수로 설정하여 수신 트래픽의 모든 속성에 따라 다른 제한을 적용할 수 있습니다.

행동의 중요한 변화

  • 폐기된 APINGINX Plus R13 (2017년 8월 출시)은 메트릭 수집 및 업스트림 그룹의 동적 재구성을 위한 완전히 새로운 NGINX Plus API를 도입했으며, 이전에 이러한 기능을 구현했던 Status 및 Upstream Conf API를 대체했습니다. 당시 발표된 대로, 지원되지 않는 API는 NGINX Plus R16 에서 종료될 때까지 상당 기간 동안 계속 사용 및 지원되었습니다. 구성에 status 및/또는 upstream_conf 지시문이 포함되어 있는 경우 R19로 업그레이드하는 과정에서 이를 api 지시문으로 바꿔야 합니다.

    새로운 NGINX Plus API 로의 마이그레이션에 대한 조언과 지원이 필요하면 블로그의 전환 가이드를 참조하거나 당사 지원팀에 문의하세요.

  • 지원되는 새로운 운영 체제

    • 알파인 3.10
    • 데비안 10(“버스터”)
    • 우분투 19.04("디스코")
  • 더 이상 지원되지 않는 이전 운영 체제

    • 데비안 8("제시")
    • 우분투 14.04("신뢰할 수 있는")
    • 우분투 18.10(“코스믹”)

지원되는 플랫폼에 대한 자세한 내용은 NGINX Plus동적 모듈 에 대한 기술 사양을 참조하세요.

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

새로운 기능으로 모니터링이 더욱 유연해졌습니다

NGINX Plus R19는 모니터링을 더욱 유연하게 만들어 수집할 수 있는 메트릭 종류와 이를 분석하는 방법 모두 확장했습니다.

위치별 메트릭

NGINX Plus API는 server{} 블록에 status_zone 지시문을 포함할 경우 가상 서버에 대한 여러 카운터를 포함하여 광범위한 실시간 모니터링 메트릭을 제공합니다. NGINX Plus R19를 사용하면 부모 server{} 블록 외에도(또는 대신) 개별 위치 블록에 대한 메트릭을 수집할 수 있습니다. 이를 위해 해당 위치 블록에 status_zone 지시문을 추가합니다. 이렇게 세부적인 모니터링을 통해 웹사이트에서 오류가 발생하는 정확한 부분을 더욱 빠르게 감지하여 문제를 더욱 효과적으로 해결할 수 있습니다.

다음 구성을 사용하면 전체 웹사이트에 대한 메트릭 수집이 가능해지고, /admin/ 으로 시작하는 URI에 대한 모든 요청에 대해서도 메트릭 수집이 가능해집니다.

그런 다음 http/location_zones 엔드포인트에서 메트릭에 액세스할 수 있습니다.

$ curl http://localhost:8080/api/5/http/location_zones { "www_admin": { "요청": 3393, "응답": { "1xx": 0, "2xx": 3307, "3xx": 81, "4xx": 5, "5xx": 0, "총": 3393 }, "폐기됨": 0, "수신됨": 15403, "보냄": 835227 } }

if 블록 내에 status_zone 지시어를 배치하는 것도 가능하지만, 메트릭은 주어진 위치에 대해 한 번만 계산되고, 요청 처리 중에 발생한 마지막 status_zone 지시어부터 계산된다는 점에 유의하세요. 다음 구성은 /admin/ 위치에 대한 요청에 쿼리 문자열이 포함될 때마다 별도의 메트릭을 수집하여 이전 예를 확장합니다.

DNS 리졸버 메트릭

NGINX Plus API 도 DNS 조회 활동, 특히 DNS 요청 유형과 응답 상태를 추적하기 위한 메트릭으로 확장되었습니다. NGINX Plus가 이름 조회를 위해 쿼리하는 DNS 서버 그룹에 대한 메트릭을 수집하려면 resolver 지시문에 status_zone 매개변수를 추가합니다.

그런 다음 확인자 엔드포인트에서 메트릭에 액세스할 수 있습니다.

$ curl http://localhost:8080/api/5/resolvers { "내부 DNS": { "요청": { "이름": 132, "SRV": 0, "주소": 0 }, "응답": { "오류 없음": 130, "이전": 0, "servfail": 0, "nx도메인": 0, "notimp": 0, "거부됨": 0, "시간 초과": 2, "알 수 없음": 0 } } }

라이브 활동 모니터링 대시보드 업데이트

NGINX Plus 라이브 활동 모니터링 대시보드는 NGINX Plus API 에서 수집한 메트릭을 추적하기 위한 편리한 중앙 위치를 제공합니다. 대시보드는 위에서 설명한 새로운 리졸버 및 위치별 메트릭을 포함하도록 NGINX Plus R19 에서 확장되었습니다. 또한, 이전에는 NGINX Plus API를 통해서만 접근할 수 있었던 클러스터의 런타임 상태 공유와 관련된 메트릭을 보고합니다( Zone Synchronization 모듈에서 활성화됨).

이름이 바뀐 탭이 두 개 있고 새 탭이 두 개 있습니다.

  • HTTP 영역은 서버 영역 탭의 새 이름입니다. 이제 탭에는 서버 블록뿐 아니라 위치 블록에 대한 메트릭도 표시됩니다.
  • HTTP 업스트림은 업스트림 탭의 새 이름입니다. 이는 HTTP와 TCP/UDP 모듈이 모두 구성될 때 명확성을 제공합니다.
  • 새로운 클러스터 탭에는 NGINX Plus 클러스터의 상태 공유에 대한 메트릭이 표시됩니다.
  • 새로운 확인자 탭에는 DNS 조회 활동에 대한 메트릭이 표시됩니다.

새로운 대시보드를 살펴보려면 https://demo.nginx.com/을 방문하세요.

NGINX Plus 라이브 활동 모니터링 대시보드 스크린샷

Prometheus 모니터링을 위한 새로운 모듈

NGINX Plus API는 JSON 형식으로 메트릭을 반환합니다. JSON 형식은 외부 모니터링 및 애플리케이션 성능 관리(APM) 솔루션과 통합하는 데 일반적이고 편리한 형식입니다. 이제 Kubernetes 환경에서 특히 인기 있는 Prometheus 형식으로 메트릭을 내보낼 수도 있습니다.

Prometheus-njs 모듈은 Prometheus 메트릭을 제공합니다. 내보낸 메트릭을 활성화하려면:

  1. Prometheus-njs 모듈을 설치합니다 .
  2. NGINX Plus API를 구성합니다 .
  3. NGINX Plus 구성 파일에서 Prometheus 메트릭 수집을 위한 전용 위치를 구성합니다.

  4. Prometheus 구성 파일의 scrape_config 섹션에서 NGINX Plus 인스턴스의 네트워크 주소를 지정하여 NGINX Plus에서 메트릭을 가져오도록 Prometheus를 구성합니다.

드라이런 모드에서 속도 제한 테스트

NGINX Plus는 속도 제한에 대해 매우 유연한 접근 방식을 제공합니다. 여러 요금 한도를 동시에 추적하고 적용할 수 있습니다. 강제 실행 자체는 과도한 요청 지연, 전면 거부, 강제 실행 전에 무제한 요청 급증 허용 등 5가지 유형과 이러한 동작의 조합으로 이루어집니다. 자세한 설명은 블로그에서 확인하세요.

이러한 유연성 덕분에 매우 정교한 속도 제한이 가능하지만, 처음에 트래픽에 적합한 속도 제한을 어떻게 결정할까요? 계획된 요금 한도가 너무 높은지(서버에 과부하가 걸릴 수 있는 경우) 또는 너무 낮은지(사용자 경험에 영향을 줄 수 있는 경우)를 미리 어떻게 알 수 있나요?

가장 좋은 정보 소스는 NGINX Plus 오류 로그입니다. NGINX Plus가 요청을 지연하거나 거부하면 다음과 같은 자세한 항목이 생성됩니다.

2019/09/03 11:42:12 [오류] 57#57: *339 요청 제한, 초과: 0.600 by zone "my_limit", 클라이언트: 172.17.0.1, 서버: www.example.com, 요청: "GET / HTTP/1.1", 호스트: "www.example.com:80"

이 항목에는 구성된 속도를 초과한 밀리초당 요청 수( 초과 필드), 초과된 특정 한도( 영역 필드), 클라이언트의 IP 주소( 클라이언트 필드)와 같은 유용한 정보가 표시됩니다. 하지만 실제로 트래픽 제한을 적용하기 전에 해당 정보를 얻을 수 있다면 계획 목적으로만 유용합니다.

NGINX Plus R19는 속도 제한을 위한 "드라이런" 모드를 통해 이러한 예측 기능을 추가합니다. 로그 항목은 평소처럼 생성되지만 속도 제한은 적용되지 않습니다. 드라이런 모드를 활성화하려면 limit_req 지시문 또는 지시문과 같은 블록에 새 limit_req_dry_run 지시문을 포함시킵니다.

다음 예에서 limit_req_zone 지시어는 초당 10,000개 요청부터 초당 10개 요청까지 네 가지 다른 속도 제한을 정의합니다. 루트 위치 블록(9~12번째 줄)에서 limit_req 지침을 사용하여 해당 요율을 적용하고, 시행을 비활성화하기 위해 limit_req_dry_run 지침을 사용합니다.

NGINX Plus는 지정된 비율 제한을 초과하는 모든 요청에 대해 'dry run' 이라는 문구가 명확하게 표시된 로그 항목을 기록합니다. 그런 다음 로그를 분석할 때 영역 필드별로 항목을 필터링하여 어떤 속도 제한이 원하는 동작을 제공하는지 확인할 수 있습니다.

2019/09/03 11:56:26 [오류] 142#142: *22282 요청 제한, 드라이런 , 초과: 1.000 by zone "1000rs", 클라이언트: 172.17.0.1, 서버: www.example.com, 요청: "GET / HTTP/1.1", 호스트: "www.example.com:80"

키-값 저장소에 대한 향상

NGINX Plus의 메모리 내 키-값 저장소를 사용하면 NGINX Plus API를 사용하여 요청의 속성에 따라 트래픽 관리를 동적으로 구성할 수 있습니다. 대표적인 사용 사례로는 IP 주소의 동적 거부 목록 , 동적 대역폭 제한 , 인증 토큰 캐싱 등이 있습니다.

네트워크 범위 지원

NGINX Plus R19는 기존 개별 IP 주소 지원에 IP 네트워크 범위(서브넷)에 대한 지원을 추가하여 키-값 저장소를 확장합니다. 즉, 키-값 저장소의 단일 항목으로 네트워크 범위 내의 모든 IP 주소를 일치시킬 수 있어 구성이 간소화되고 범위를 구성하는 주소를 개별적으로 추가할 필요가 없으므로 시간이 절약됩니다. 키-값 저장소는 CIDR 표기법을 사용하여 네트워크 범위를 나타냅니다. 예를 들어, 192.168.13.0/24는 192.168.13.0부터 192.168.13.255까지의 주소를 나타냅니다. IPv4 및 IPv6 주소와 범위가 모두 지원됩니다.

네트워크 범위를 활성화하려면 IP 주소를 동적 거부 목록에 추가하기 위한 다음 구성과 같이 keyval_zone 지시문에 새 type=ip 매개변수를 포함합니다. NGINX Plus가 조회를 수행하면 키‑값 저장소에 저장된 네트워크 범위 내의 모든 IP 주소가 일치하는 항목을 반환합니다.

2번째 줄에서는 $remote_addr (클라이언트 IP 주소)를 키로 사용하여 denylist 키-값 저장소에서 조회를 수행하여 $in_denylist 변수를 평가하도록 지정합니다. 간단한 if 블록(8~10행)은 클라이언트 IP 주소가 거부 목록에 있는 경우 요청을 거부합니다.

다음 curl 명령은 NGINX Plus API를 호출하여 위에 언급된 네트워크 범위에 대한 키‑값 저장소에 항목을 생성합니다.

$ curl -X POST -d '{"192.168.13.0/24":"1"}' http://localhost:8080/api/5/http/keyvals/denylist

항목당 만료 시간 초과

이전 섹션에서 denylist.conf 의 1번째 줄에 있는 keyval_zone 지시문에 대한 timeout=24h 매개변수는 denylist 키‑값 저장소의 각 항목이 생성된 후 24시간 후에 만료되고 저장소에서 제거됨을 의미합니다.

NGINX Plus R19를 사용하면 기본 시간 초과( 시간 초과 매개변수로 전체 키-값 저장소에 대해 설정됨)를 모든 개별 항목에 대해 다른 시간 초과로 재정의할 수 있습니다. 개별 시간 초과는 기본값보다 크거나 작을 수 있습니다.

기본이 아닌 시간 초과로 항목을 만들려면 두 개의 필드가 있는 JSON 개체로 값을 제공하세요.

  • - 이 경우 원하는 값으로 설정1 $in_denylist 변수를 채우려면
  • 만료 – 값이 생성되고 만료되는 밀리초 수로 설정됩니다.

다음 JSON은 1시간(3,600,000밀리초) 후에 만료되는 localhost(127.0.0.1)에 대한 거부 목록 항목을 나타냅니다.

{
"127.0.0.1": {
"값": "1",
"만료": 3600000
}
}

다음 curl 명령은 키‑값 저장소에 해당 항목을 생성합니다.

$ curl -X POST -d '{"127.0.0.1":{"value":"1","expire":3600000}}' http://localhost:8080/api/5/http/keyvals/denylist

동적 대역폭 제어

limit_rate 지시어는 NGINX Plus가 HTTP 요청에 대한 응답을 보내는 속도(초당 바이트 수)를 설정하고, limit_rate_after 지시어는 해당 제한이 적용되기 전에 NGINX Plus가 보내는 바이트 수를 설정합니다. NGINX Plus R19를 사용하면 각 지시문에 대한 매개변수는 정적 값이 아닌 변수가 될 수 있으므로 요청의 속성에 따라 대역폭 사용을 동적으로 제어할 수 있습니다.

다음 예제 구성은 클라이언트에서 사용하는 TLS 버전에 따라 대역폭을 설정하여 현대적인 브라우저일수록 응답 속도가 더 빨라지도록 해줍니다.

이전 NGINX Plus 릴리스에서는 $limit_rate 변수를 설정하여 대역폭을 제한할 수 있었습니다. 대신 이 간소화된 방법을 사용하는 것이 좋습니다. 자세한 내용은 limit_rate 지시어에 대한 설명서를 참조하세요.

TCP/UDP 트래픽에 대한 proxy_download_rateproxy_upload_rate 지침도 이제 가변 매개변수를 허용합니다.

훨씬 더 정교한 대역폭 제한을 위해 NGINX JavaScript 모듈(njs) 과 같은 스크립팅 확장을 사용하여 지정된 연결에 적합한 대역폭 제한을 결정하기 위한 고급 사용자 정의 논리를 구현할 수 있습니다.

NGINX Plus 에코시스템 업데이트

NGINX 자바스크립트 모듈

NGINX JavaScript 모듈(njs) 이 0.3.5 버전 으로 업데이트되었습니다. 가장 주목할 만한 개선 사항(이전 버전에서 누적)은 다음과 같습니다.

  • 화살표 함수 지원(洪志道 [Hong Zhi Dao] 및 Artem S. Povalyukhin에게 감사드립니다)
  • 전역 프로세스 객체(특히 환경 변수를 읽는 데 유용함)
  • String.prototype.trim 함수

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

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

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

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


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