http3対応のnginxのインストール
nginxでhttp3に対応するためにはバージョン1.25以上が必要となる。 apt でインストールされるnginxのバージョンを以下のコマンドで確認する。
sudo apt update sudo apt info nginx
sudo apt info nginx
の実行後に表示されるVersionで確認できる
user@ubuntu:~$ sudo apt info nginx Package: nginx Version: 1.24.0-2ubuntu7 Priority: optional Section: web Origin: Ubuntu ...
バージョンが1.25よりも古い場合は、以下手順のコマンドで最新nginxの安定版をaptのリポジトリに追加する。(詳細はnginx公式参照)
- 前提条件ツールのインストール
- 公式のnginx署名鍵をインポートし、apt がパッケージを検証できるようにする
- 安定版nginxパッケージをaptリポジトリに設定する
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
再度、aptでインストールされるnginxのバージョンを確認する。
sudo apt update sudo apt info nginx
バージョンが1.25以上であることを確認する。
user@ubuntu:~$ sudo apt info nginx Package: nginx Version: 1.26.1-2~noble Priority: optional Section: httpd ...
あとは普通にaptでインストールする
sudo apt install nginx
インストール後 nginx -v
でバージョンが1.25以上であることを確認する。
user@ubuntu:~$ nginx -v nginx version: nginx/1.26.1
nginx.confの設定
http3対応の要点は以下
- ssl_protocolsに
TLSv1.3
が必要 - http2,http3の両方が必要
- Alt-Svcのヘッダが必要(初回アクセス時はhttp2だがこれが目印となり次回以降http3で通信するようになるらしい)
- SSL必須(オレオレ証明書不可 == ローカル確認が困難)
ssl_protocols TLSv1.3;
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
http3 on;
add_header Alt-Svc 'h3=":443"; ma=86400';
}
ファイアウォール
http3はudpで通信するため、 UDP443ポートを解放する必要がある。
sudo ufw allow 443/udp sudo ufw status
VPS側にファイアウォールがあれば同様に開放する。
ConoHaVPSの場合、UDPのポート開放はできないようなので全開放する。(バージョン3以降の環境だとできるらしい!?)
なお、ポート開放ができていないとずっとhttp2の通信となる。
動作確認
-
ブラウザのF12開発者ツールでネットワークのプロトコルが「h3」になっていることを確認する。
- うまくいかない場合は、ブラウザのキャッシュクリア/再起動後に何度かアクセスしてみる(前回の通信プロトコルをブラウザが記憶するらしい)
-
それでもうまくいかない場合は、プロキシやVPN経由などそもそもHTTP3(UDP443)が利用できない環境ではないことを確認する。
Googleなどhttp3対応のサイトでネットワークのプロトコルが「h3」になっているかを確認するとよい。 - http3checkで確認することもできる。