QUIC 및 HTTP/3 지원
QUIC 및 HTTP/3 프로토콜에 대한 지원은 1.25.0부터 가능합니다. 또한 1.25.0부터 Linux 바이너리 패키지에서 QUIC 및 HTTP/3 지원이 가능합니다.
QUIC 및 HTTP/3 지원은 실험적이므로 경고 사항이 적용됩니다. |
소스에서 빌드(Building from sources)
빌드는 구성 명령을 사용하여 구성됩니다. 자세한 내용은 소스에서 nginx 빌드를 참조하세요.
nginx를 구성할 때 –with-http_v3_module 구성 매개변수를 사용하여 QUIC 및 HTTP/3를 활성화할 수 있습니다.
BoringSSL, LibreSSL 또는 QuicTLS와 같은 nginx를 빌드하려면 QUIC 지원을 제공하는 SSL 라이브러리를 사용하는 것이 좋습니다. 그렇지 않으면 초기 데이터를 지원하지 않는 OpenSSL 호환성 레이어가 사용됩니다.
BoringSSL로 nginx를 구성하려면 다음 명령을 사용하십시오.
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../boringssl/include"
--with-ld-opt="-L../boringssl/build/ssl
-L../boringssl/build/crypto"
또는 QuicTLS를 사용하여 nginx를 구성할 수 있습니다.
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../quictls/build/include"
--with-ld-opt="-L../quictls/build/lib"
또는 최신 버전의 LibreSSL을 사용하여 nginx를 구성할 수 있습니다.
./configure
--with-debug
--with-http_v3_module
--with-cc-opt="-I../libressl/build/include"
--with-ld-opt="-L../libressl/build/lib"
구성 후 make를 사용하여 nginx를 컴파일하고 설치합니다.
구성(Configuration)
ngx_http_core_module 모듈의 Listen 지시문에는 지정된 포트에서 QUIC를 통해 HTTP/3를 활성화하는 새로운 매개변수 quic이 있습니다.
quic 매개변수와 함께 재사용포트 매개변수를 지정하여 여러 워커에서 제대로 작동하도록 할 수도 있습니다.
지시어 목록은 ngx_http_v3_module을 참조하세요.
address validation을 활성화하려면:
quic_retry on;
0-RTT를 활성화하려면:
ssl_early_data on;
GSO(Generic Segmentation Offloading)를 활성화하려면:
quic_gso on;
다양한 토큰(token)에 대한 호스트 키(host key)를 설정하려면:
quic_host_key <filename>;
QUIC에는 ssl_protocols 지시어에서 기본적으로 활성화된 TLSv1.3 프로토콜 버전이 필요합니다.
기본적으로 GSO Linux 관련 최적화는 비활성화되어 있습니다. 해당 네트워크 인터페이스가 GSO를 지원하도록 구성된 경우 활성화합니다.
QUIC 구성 예시(Example Configuration)
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http3"';
access_log logs/access.log quic;
server {
# for better compatibility it's recommended
# to use the same port for quic and https
listen 8443 quic reuseport;
listen 8443 ssl;
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
location / {
# required for browsers to direct them to quic port
add_header Alt-Svc 'h3=":8443"; ma=86400';
}
}
}
Troubleshooting (QUIC)
문제를 식별하는 데 도움이 될 수 있는 팁:
- nginx가 적절한 SSL 라이브러리로 빌드되었는지 확인하세요.
- nginx가 런타임에 적절한 SSL 라이브러리를 사용하고 있는지 확인하세요(nginx -V는 현재 사용되는 라이브러리를 보여줍니다).
- 클라이언트가 실제로 QUIC를 통해 요청을 보내고 있는지 확인하세요. 인증서가 매우 까다로울 수 있는 실제 브라우저를 사용하기 전에 서버가 올바르게 구성되었는지 확인하기 위해 ngtcp2와 같은 간단한 콘솔 클라이언트로 시작하는 것이 좋습니다.
- 디버그 지원으로 nginx를 빌드하고 디버그 로그를 확인하세요. 여기에는 연결에 대한 모든 세부정보와 연결 실패 이유가 포함되어야 합니다. 모든 관련 메시지에는 “quic” 접두사가 포함되어 있으며 쉽게 필터링할 수 있습니다.
- 더 심층적인 조사를 위해 NGX_QUIC_DEBUG_PACKETS, NGX_QUIC_DEBUG_FRAMES, NGX_QUIC_DEBUG_ALLOC, NGX_QUIC_DEBUG_CRYPTO 매크로를 사용하여 추가 디버깅을 활성화할 수 있습니다.
./configure
--with-http_v3_module
--with-debug
--with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO"