ビルド
nginx-build \
-d work \
-c nginx-build-config \
...
-libressl \
...
-v 1.25.0
-c config
./configure \
...
--with-http_v3_module \
...
-libressl
何故 openssl を使わないか、詳しくはこちらで
https://zenn.dev/catatsuy/articles/71609eff5611e4
-v 1.25.0
mainline 1.25.0 から実験的にサポート開始
ngx_http_v3_module の詳細はこちら
https://nginx.org/en/docs/http/ngx_http_v3_module.html
nginx config
大事そうなところだけ
# nginx.conf
ssl_protocols TLSv1.3; # HTTP/3 は TLS 1.3 only
# server
# ↓ は default_server 用の server ブロック、reuseport は別 server ブロックでは利用できないのでここで指定することで reuseport を有効化する
server {
listen 443 ssl http2;
listen 443 quic reuseport default_server;
...
}
# server
# API etc...
server {
listen 443 quic; # HTTP/3
listen 443 ssl http2; # HTTP/3 以外も使えるように
...
location / {
...
add_header Alt-Svc 'h3=":443"; ma=2592000'; # このヘッダーでクライアントに HTTP/3 に対応していることを通知する
...
}
}
確認
ヘアピンNAT が有効じゃない環境で試す。
なんでか知らんけどワイの手元マシン(ヘアピンNAT 環境)だと HTTP/2 でで繋いじゃう。
amd64 環境を持っているならこういうコンテナイメージを使って HTTP/3 に対応した curl で動作確認ができる。DYOR
https://hub.docker.com/r/ymuski/curl-http3
不幸にもワイは arm64 なので、VPN 環境の Chrome で確認