Nginx v1.27.0でHTTP/2とHTTP/3に対応させる

3 min read

こんにちは、無能です。
東京の家が一回見つかったと思ったらまた振り出しに戻り、なんやかんやでいい物件が見つかったような気がする今日この頃です。最悪、どっかしらのシェアハウスにでも転がり込みます。

今の職場では同じプロジェクトメンバーに送別会やろーぜ!と言ってくれ有り難いという今日この頃。
人生で人に恵まれているなあとつくづく思います。

ところで、こないだのDenoにプルリクエストを送ったらマイルストーンを設定してくれたので焦ることなく淡々とソース追うだけです。なんやかんやですごい量になっているDenoのRustコード自体の最適解を見つけ出すのはしょうもない機能でも出来る限り変更点無いようにするのは説明書がソースコードみたいなことになっているので色々試してくしかないですね。
うまくいかなかったらうまくいかなかったとき考えます。

NginxでHTTP/2とHTTP/3対応しよう

PHPの開発者であるラスマス・ラードフのインタビュー記事を読んでいたら、HTTP/2に未来を感じるだとかを言っているのを見て「あれ、俺のNginxサーバーどうなっていたかな」と気になり対応してみることに。
どうやらNginxのHTTP/3対応はv1.25以降であるらしいからバージョン確認。

# nginx -v
nginx version: nginx/1.27.0

対応しているっぽいですね。
自分のNginxpkgから入れたものではなく、自分でビルドしてきたものなので同じFreeBSD環境でも差異はあるかと思います。

難しいことは考えずに一旦対応させてみることにします。

confファイルへの記述

リバースプロキシとして稼働させているだけのNginxサーバなのでサクサクやっていきます。

server {
    listen 443 ssl;
    listen 443 quic reuseport;
    listen [::]:443 quic reuseport;

    http2 on;
    http3 on;
    server_name soulminingrig.com www.soulminingrig.com;

なんかHTTP/3って確かGoogleが推進しようとしているものでQUICプロトコル自体Google作ったものだった気がします。
ヘッダー情報に以下を追記

        add_header Alt-Svc 'h3=":443"; ma=86400';
        add_header X-Content-Type-Options nosniff;

そして、nginx -tでテストを行い何も無ければ再起動。
rootユーザで作業しているので以下で実行。

service nginx restart

そして、QUIC自体が443/UDPを使うらしくコレをポート開放してあげないといけないみたい。。。 第3章 詳解HTTP/3 ~ いかにしてQUICを活用し、いかにして高速化を実現したか

現在多くの実装は、デフォルトではUDPの443番ポートを使用しているようです。

上記の通りに見れば

        add_header Alt-Svc 'h3=":443"; ma=86400';

で設定したのが443番ポートだから、443番開けてあげて変更する場合は別ポート開放で良さそうですね。

vim /etc/pf.conf

これで以下を追記

set skip on lo
exsrv1 = 167.179.75.206
~~~
# HTTP/3 Protocol
pass in inet proto udp from any to $exsrv1 port 443

これで以下で-nfオプションでテストしてから-fで適応。

pfctl -nf /etc/pf.conf
pfctl -f /etc/pf.conf

ちゃんと適応されたかな?

適応されたかどうか、Curlで確認する方法もあるみたいですがだいたいこういうときには自分のネットワークと関係ないところから確認したほうがうまく検証出来るのでブラウザ上から確認します。
HTTP/3 Check
Image
うん、うまく行きました!

もっと細かく設定している方も居ますが、一旦ここまででよいかなあ。と思っています。
それでは。またよろしくお願いします。