Subscribe to receive notifications of new posts:

Subscription confirmed. Thank you for subscribing!

NGINX와 quiche로 HTTP/3 시험해 보기

Loading...

얼마 전에 저희 엣지 네트워크에서 HTTP/3 가 이용 가능 하다고 발표한 바 있습니다. HTTP/3은 인터넷의 보안과 성능을 향상시키도록 만들어진 HTTP의 새로운 버전입니다. 이제 여러분의 클라우드플레어 존에서 HTTP/3 을 켜 두고 Chrome Canarycurl 과 같은 클라이언트를 사용하여 시험해 볼 수 있습니다.

예전부터 프로토콜을 시험하고자 하는 사람들을 위해 quiche 프로젝트의 일부로 HTTP/3 예제 서버를 제공하고 있습니다만, 기능이 제한적인 관계로 범용 웹 서버를 대체할 수 있는 정도는 아니었습니다.

이번에는 여러분의 NGINX 에 우리의 HTTP/3과 QUIC 구현을 통합할 수 있음을 발표하게 되어 기쁩니다. 이것은 NGINX의 패치 형태로 제공되며 업스트림의 NGINX 코드베이스에 적용하여 직접 빌드할 수 있습니다.

주의할 점은 이것은 NGINX 프로젝트에서 공식적으로 지원되거나 승인받은 것이 아니며, 단지 저희 클라우드플레어가 QUIC과 HTTP/3의 도입을 더 많은 커뮤니티에게 촉진하기 위한 목적으로 제공하는 것이라는 점입니다.

빌드하기

첫번째로 NGINX 소스 코드를 다운로드받아서 압축을 풀어 둡니다. HTTP/3 과 QUIC 패치는 1.16.x 릴리즈 브랜치에만 적용 가능하다는 점에 주의해 주세요 (최신 안정 버전은 1.16.1 입니다).

 % curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
 % tar xvzf nginx-1.16.1.tar.gz

HTTP/3 과 QUIC의 기반 구현인 quiche도 받아 놓습니다:

 % git clone --recursive https://github.com/cloudflare/quiche

이제 패치를 NGINX에 적용 합니다:

 % cd nginx-1.16.1
 % patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

마지막으로 NGINX에 HTTP/3 지원을 추가하여 빌드 합니다:

 % ./configure                          	\
   	--prefix=$PWD                       	\
   	--with-http_ssl_module              	\
   	--with-http_v2_module               	\
   	--with-http_v3_module               	\
   	--with-openssl=../quiche/deps/boringssl \
   	--with-quiche=../quiche
 % make

위 명령은 NGINX 빌드 시스템에게 HTTP/3 지원을 추가하고 ( --with-http_v3_module ) 다운로드받아 놓은 quiche 라이브러리를 해당 경로에서 찾아서 사용하라는 의미( --with-quiche=../quiche ) 이며, TLS와 HTTP/2 옵션을 추가 합니다. 추가 옵션이 필요하면 더 설정하면 됩니다.

상세한 방법에 대해서는 여기를 참조해 주세요.

실행하기

빌드가 완료 되면 listen 지시어에 quicreuseport 옵션을 추가하여 HTTP/3 연결을 받아들일 수 있도록 설정 합니다.

다음은 바로 시작해 볼 수 있는 최소한의 설정 입니다:

events {
    worker_connections  1024;
}

http {
    server {
        # QUIC과 HTTP/3 을 설정.
        listen 443 quic reuseport;

        # HTTP/2 설정 (옵션).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # 모든 TLS 버전을 설정 (TLSv1.3은 QUIC에서 필요함)
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        
        # HTTP/3 프로토콜 협상을 위해 Alt-Svc 헤더를 추가.
        add_header alt-svc 'h3-24=":443"; ma=86400';
    }
}

위 설정은 각각 TCP/443 포트에서 HTTP/2, UDP/443 포트에서 HTTP/3을 서비스할 수 있도록 합니다.

이제 이용 가능한 HTTP/3 클라이언트 ( Chrome Canary, curl,  quiche의 예제로 제공되는 HTTP/3 클라이언트 등) 를 사용하여 여러분의 NGINX에 HTTP/3으로 연결할 수 있습니다.

여러분이 직접 HTTP/3을 시험해 볼 수 있도록 이 패치를 제공해 드리게 되어서 기쁩니다. 하지만 이 구현은 아직 실험적이며 기능에 제약 및 버그가 존재할 수 있습니다. 만약 여러분이 사용 중에 문제나 버그를 발견하면 quiche 프로젝트에 티켓을 제출해 주세요.

This is a Korean translation of an existing post by Alessandro Ghedini, translated by Junho Choi.

We protect entire corporate networks, help customers build Internet-scale applications efficiently, accelerate any website or Internet application, ward off DDoS attacks, keep hackers at bay, and can help you on your journey to Zero Trust.

Visit 1.1.1.1 from any device to get started with our free app that makes your Internet faster and safer.

To learn more about our mission to help build a better Internet, start here. If you're looking for a new career direction, check out our open positions.

한국어 개발자 NGINX (KO) QUIC (KO) HTTP3 (KO)

Follow on Twitter

Cloudflare |Cloudflare

Related Posts

January 31, 2018 12:13PM

Rust 로 복잡한 매크로를 작성하기: 역폴란드 표기법​

Rust에는 흥미로운 기능이 많지만 그중에도 강력한 매크로 시스템이 있습니다. 하지만 The Book과 여러가지 튜토리얼을 읽고 나서도 서로 다른 요소의 복잡한 리스트를 처리하는 매크로를 구현하려고 하면 저는 여전히 어떻게 만들어야 하는지를 이해하는데 힘들어 하며...