HTTP/2 는 NGINX Plus에서 완벽 지원합니다.

NGINX Plus의 HTTP/2 구현은 기존 사이트 및 애플리케이션과 원활하게 작동합니다. NGINX Plus는 사용자가 어떤 브라우저를 선택하든 최상의 경험을 위해 HTTP/1.x 및 HTTP/2 트래픽을 병렬로 제공하므로 최소한의 변경만 필요합니다.

목차

1. HTTP/2 로 전환하는 이유는 무엇입니까?
2. NGINX Plus가 HTTP/2 를 구현하는 방법
2-1. HTTP/2 Gateway
2-2. 하위 호환성
3. HTTP/2로 전환
3-1. 모든 트래픽을 SSL/TLS로 리다이렉션
3-2. HTTP/2 활성화
4. 주의사항
5. Special Thanks

1. HTTP/2로 전환하는 이유는 무엇입니까?

HTTP/2는 애플리케이션을 위한 데이터 전송을 보다 효율적이고 안전하게 만듭니다. HTTP/2는 HTTP/1.x와 비교할 때 성능을 향상시키는 5가지 주요 기능을 추가합니다.

  • 진정한 다중화(True multiplexing) – HTTP/1.1은 keepalive 연결을 통해 들어오는 요청에 대해 엄격한 순서대로 완료를 적용합니다. 다음 요청의 처리가 시작되기 전에 이전 요청이 완료되어야 합니다. 하지만 HTTP/2는 이 요구사항을 제거하고 요청들을 병렬로, 순서와 상관없이 처리할 수 있도록 합니다.
  • 단일 영구 연결(Single, persistent connection) – HTTP/2는 요청들의 진정한 다중화(true multiplexing)를 허용하기 때문에 웹 페이지의 모든 객체를 병렬로 다운로드 할 수 있습니다. HTTP/1.x에서는 병렬로 리소스를 다운로드하기 위해 여러 개의 연결을 사용하므로, TCP 프로토콜을 비효율적으로 사용하게 됩니다.
  • 이진법 인코딩(Binary encoding) – 헤더 정보는 일반 텍스트가 아닌 압축된 이진법 형식으로 전송되어, 전송 중에 바이트를 절약합니다.
  • 헤더 압축(Header compression) – 헤더는 특수 제작된 알고리즘인 HPACK 압축을 사용하여 압축되어 네트워크를 통과하는 데이터의 양을 더욱 줄입니다.
  • SSL/TLS 암호화(SSL/TLS encryption) – HTTP/2에서는 SSL/TLS 암호화가 필수입니다. 이는 RFC에서 강제되는 것이 아니라, 현재 HTTP/2를 구현한 모든 웹 브라우저들에 의해 강제됩니다. SSL/TLS는 사이트의 보안성을 높이며, HTTP/2의 모든 성능 향상으로 암호화 및 복호화에 따른 성능 저하가 완화됩니다.

HTTP/2에 대해 자세히 알아보려면

  • HTTP/2에 대해 알아야 할 모든 것을 다루는 가이드(PDF)를 읽어보십시오.
  • Google의 고성능 브라우저 네트워킹 eBook 특별판을 다운로드하세요.
  • Can I use 웹사이트를 방문하여 HTTP/2를 포함한 광범위한 프론트엔드 웹 기술에 대한 브라우저 지원을 확인하십시오.

2. NGINX Plus가 HTTP/2 를 구현하는 방법

HTTP/2의 구현은 널리 사용되었던 SPDY를 지원하기 위해 만들어졌으며 (SPDY를 사용했던 웹 사이트 중 거의 75%가 NGINX 또는 NGINX Plus를 사용합니다), NGINX Plus를 통해 매우 적은 인프라 변경으로 HTTP/2를 배포할 수 있습니다. 이 섹션에서는 NGINX Plus가 HTTP/2를 지원하는 방법에 대해 논의합니다.

2-1. HTTP/2 Gateway

NGINX Plus는 HTTP/2 Gateway 역할을 수행합니다. HTTP/2를 지원하는 클라이언트 웹 브라우저와 통신하지만 백엔드 서버와의 통신을 위해 HTTP/2 요청을 다시 Http/1.x(또는 FastCGI, SCGI, uwsgi 등 – 현재 사용중인 프로토콜)로 변환합니다.

2-2. 하위 호환성

서버 수준에서 구현된 HTTP/2는 HTTP/2 및 HTTP/1.x 모두에 대한 브라우저를 지원합니다.

HTTP/1.x와 HTTP/2를 동시에 지원하기 위해 NGINX Plus는 TLS에 Next Protocol Negotiation (NPN)확장을 구현합니다. 웹 브라우저가 서버에 연결되면 지원하는 프로토콜 목록을 서버에 전송합니다. 만약 브라우저가 지원되는 프로토콜 목록에 h2(즉, HTTP/2)를 포함한다면, NGINX Plus는 해당 브라우저와의 연결에 HTTP/2를 사용합니다. 만약 브라우저가 NPN을 구현하지 않거나 지원되는 프로토콜 목록에 h2를 포함하지 않는다면, NGINX Plus는 HTTP/1.x로 대체됩니다.

3. HTTP/2 로 전환

NGINX는 HTTP/2로 최대한 원활하게 전환하는 것을 목표로 합니다. 이 섹션에서는 NGINX Plus 구성에 대한 몇 가지 변경 사항을 포함하여 애플리케이션에 대해 HTTP/2를 활성화하는 데 필요한 변경 사항을 살펴봅니다.

3-1. 모든 트래픽을 SSL/TLS로 리다이렉션

만약 앱이 아직 SSL/TLS로 암호화되지 않은 경우 지금 전환하는 것이 좋습니다. 앱을 암호화하면 감청 및 중간자 공격으로부터 보호됩니다. 일부 검색 엔진은 암호화된 사이트에 대해 검색 결과의 순위를 향상시켜주기도 합니다. 다음 구성 블록은 모든 일반 HTTP 요청을 사이트의 암호화된 버전으로 리다이렉션합니다.

server {
    listen 80;
    location / {
        return 301 https://$host$request_uri;
    }
}

3-2. HTTP/2 활성화

HTTP/2 지원을 활성화하려면 모든 listen 지시문에 http2 매개변수를 추가하기만 하면 됩니다. 또한, 암호화되지 않은 경우 브라우저가 HTTP/2를 지원하지 않기 때문에 ssl 매개변수도 포함해야 합니다.

server {
    listen 443 ssl http2 default_server;

    ssl_certificate     server.crt;
    ssl_certificate_key server.key;
    …
}

필요한 경우, 예를 들어 nginx -s reload 명령을 실행하여 NGINX Plus를 다시 시작하세요.

4. 주의사항

  • NGINX Plus 앞에 위치한 웹 애플리케이션 방화벽(WAF)을 사용하는 경우 HTTP/2를 구문 분석할 수 있는지 확인하거나 NGINX Plus 뒤로 이동시키는 것이 좋습니다.
  • ssl_prefer_server_ciphers가 on으로 설정되거나 부록 A: TLS 1.2 Ciper Suite Black List에 정의된 ssl_ciphers 목록이 사용되는 경우 브라우저에 핸드셰이크 오류가 발생하고 작동하지 않습니다. 자세한 내용은 HTTP/2 RFC의 섹션 9.2.2를 참조하십시오.

5. Special Thanks

NGINX는 우리 소프트웨어를 많이 사용하고 HTTP/2 구현 개발을 기꺼이 공동 후원한 DropboxAutomattic에게 감사를 표합니다. 그들의 기여는 이 소프트웨어를 귀하에게 제공하는 능력을 가속화하는 데 도움이 되었으며, 귀하가 차례로 그들을 지원할 수 있기를 바랍니다.

NGINX Plus의 HTTP/2 지원을 직접 사용해 보십시오. 지금 무료 30일 평가판을 시작하거나 NGINX STORE에 연락하여 문의하십시오.

사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.