구독해서 새 게시물에 대한 알림을 받으세요.

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

2019. 10. 17.

4 분(소요 시간)

얼마 전에 저희 엣지 네트워크에서 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.

Cloudflare에서는 전체 기업 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효과적으로 구축하도록 지원하며, 웹 사이트와 인터넷 애플리케이션을 가속화하고, DDoS 공격을 막으며, 해커를 막고, Zero Trust로 향하는 고객의 여정을 지원합니다.

어떤 장치로든 1.1.1.1에 방문해 인터넷을 더 빠르고 안전하게 만들어 주는 Cloudflare의 무료 앱을 사용해 보세요.

더 나은 인터넷을 만들기 위한 Cloudflare의 사명을 자세히 알아보려면 여기에서 시작하세요. 새로운 커리어 경로를 찾고 있다면 채용 공고를 확인해 보세요.
한국어Developers (KO)NGINX (KO)QUIC (KO)HTTP3 (KO)

X에서 팔로우하기

Cloudflare|@cloudflare

관련 게시물

2023년 12월 18일 오후 2:00

Turnstile을 Cloudflare WAF와 통합하여 가져오기 요청에 인증 질문하기

Cloudflare 고객은 "사전 허가"가 활성화된 새 Turnstile 위젯을 편집하거나 생성하여 이제 페이지의 HTML이 로드될 때 Turnstile을 사용하여 인증 질문을 발급받고 모든 유효한 응답에 대하여 유효한 Turnstile 토큰이 있는지 확인할 수 있습니다...

2023년 7월 19일 오전 2:03

Cloudflare Zaraz의 업그레이드: 정식 출시 및 새로운 가격 책정

Cloudflare Zaraz가 베타 버전에서 벗어나 이제 모든 고객이 정식으로 사용할 수 있습니다. Cloudflare Zaraz는 Cloudflare 개발자 플랫폼의 Free, Paid 및 Enterprise 요금제에 포함되어 있습니다. 다양한 요금제에 대해 자세히 알아보려면 대시보드를 방문하세요...