얼마 전에 저희 엣지 네트워크에서 HTTP/3 가 이용 가능 하다고 발표한 바 있습니다. HTTP/3은 인터넷의 보안과 성능을 향상시키도록 만들어진 HTTP의 새로운 버전입니다. 이제 여러분의 클라우드플레어 존에서 HTTP/3 을 켜 두고 Chrome Canary나 curl 과 같은 클라이언트를 사용하여 시험해 볼 수 있습니다.
예전부터 프로토콜을 시험하고자 하는 사람들을 위해 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 지시어에 quic
과 reuseport
옵션을 추가하여 HTTP/3 연결을 받아들일 수 있도록 설정 합니다.
다음은 바로 시작해 볼 수 있는 최소한의 설정 입니다:
events {
worker_connections 1024;
}
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-23=":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.