概要
nginx でも本格的に QUIC サポートが始まっており現在かなり使えるレベルにまでなっているので試してみました
Vagrant で構築した Ubuntu 18.04 上でビルドします
環境
- Ubuntu 18.04
- cmake 3.10
- ninja 1.8.2
- golang 1.10
- Chrome 90.0.4430.85
- nginx-quic 1.19.10
- boringssl (revision: fe3b185e5d46e643727cbf3e7cb1edcb394f1317)
依存パッケージのインストール
- sudo apt -y install mercurial ninja-build cmake build-essential g++ golang libpcre3 libpcre3-dev zlib1g-dev
自分の環境は上記で足りましたが他に足りないパッケージがある場合は適宜インストールしてください
OpenSSL のライブラリがないと言われる場合は後述する boringssl のビルドがうまくいっていない可能性があります
boringssl のビルド
- git clone https://boringssl.googlesource.com/boringssl
- cd ./boringssl
- mkdir build
- cd build
cmake -GNinja ..
- ninja
- make
cd ..
nginx-quic のビルド
- hg clone -b quic https://hg.nginx.org/nginx-quic
- cd nginx-quic
./auto/configure --with-debug --with-http_v3_module --with-cc-opt="-I../boringssl/include" --with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto"
- make
- sudo make install
nginx のバイナリは /usr/local/nginx/sbin/nginx
に配置されます
(Optional) サーバ証明書の作成
動作確認用の自己証明書を作成します
すでに適当なサーバ SSL 証明書がある場合はそれで代用可能です
nginx 起動
QUIC をオンにした nginx の設定ファイルを作成し起動します
- cat /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
log_format quic '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$quic" "$http3"';
access_log logs/access.log quic;
server {
listen 8443 http3 reuseport;
listen 8443 ssl;
ssl_certificate /etc/nginx/certificates/domain.com.crt;
ssl_certificate_key /etc/nginx/certificates/domain.com.key;
ssl_protocols TLSv1.3;
location / {
add_header Alt-Svc '$http3=":8443"; ma=86400';
}
}
}
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
動作確認
http3 が使える curl クライアントを使います
QUIC が使えるクライアントはいろいろありますのでお好きなものを使ってください
- docker run -it --rm ymuski/curl-http3 curl -IL https://192.168.100.10:8443 --http3
これで「HTTP/3 200」と表示されれば OK です
ちなみに nginx のログを見るとちゃんと HTTP3 で通信しているのが確認できます
- tail -f /usr/local/nginx/logs/access.log
172.17.0.2 - - [29/Apr/2021:12:04:56 +0000] "GET / HTTP/3.0" 200 790 "-" "curl/7.76.1-DEV" "quic" "h3-29"
以下の動作確認方法 ERR_QUIC_PROTOCOL_ERROR
となりできません
おそらく自己証明書などの関係かなと思います
chrome を使って quic でレスポンスされているか確認してみましょう
Chrome で QUIC をオンにして再起動します
- chrome://flags/#enable-quic
NET::ERR_CERT_INVALID
で先に進めない場合は「thiisunsafe」をタイプしましょう
最後に
設定ファイルなどもそのまま流用できますし QUIC でないクライアントの場合は HTTP2/1.1 で返してくれるのでかなり使えそうです
ただ自分でバイナリをビルドする必要があるのでそこがまだ面倒かなと思います
docker などで公式がリリースしてくれる日も近いかもしれません
0 件のコメント:
コメントを投稿