BayServerでHTTP/3サーバを動かす

BayServer for JavaおよびBayServer for PythonはHTTP/3サーバを動かすことができます。

まずは、以下を参照して必要なライブラリをインストールしてください。

BayServerの設計ファイル

BayServerでは、HTTP/3サーバは自分自身へのプロキシサーバとして動作します。つまり、受け取ったリクエストがHTTPポートに転送されるように設計します。

また、ブラウザをHTTP/3ポートへ誘導するために、HTTP/1(またはHTTP/2サーバ)のサーバへのリクエストの応答にはAlt-Svcヘッダを追加するようにします。この時、「HTTP/3サーバはHTTP/1サーバの代替サーバである」と言います。

例えば、以下のように2020番ポートでHTTP、2024番ポートでHTTPSを受け付けていたとします。

[port 2020]

[port 2024]
    [secure]
       cert cert/quicui.crt
       key cert/quicui.key

以下の3つの設定を加えます。

  1. 2024番ポート、すなわちHTTPSサーバへのアクセスがあったときに、UDPの2024番ポートに誘導するような設定
  2. UDPの2024番ポートでHTTP/3サーバを動かす設定
  3. HTTP/3サーバへのアクセスを2020番ポートにプロキシする設定

具体的には、以下のように変更します。

(リスト中の丸文字番号は上記番号に対応させているだけなので、番号自体は入力しないでください)

[port 2020]

[port 2024]
    addHeader Alt-Svc: h3=":2024"; ma=3600 ①
    [secure]
       cert cert/quicui.crt
       key cert/quicui.key

[port :udp:2024] ②
    docker h3
    [secure]
       cert cert/quicui.crt
       key cert/quicui.key

    [city *] ③
        [town /]

        [club *]
            docker httpWarp
            destCity localhost
            destPort 2020
            destTown /

UNIXドメインソケットを使用する

HTTPポートをUNIXドメインソケットにすることで、プロキシの通信パフォーマンスを向上させることができます。この場合は先ほどの設定から以下の2つの変更をします。

  1. UNIXドメインソケットのポートを追加
  2. プロキシの接続先をUNIXドメインソケットのポートに変更
[port :unix:/tmp/hoge] ①

[port 2020]

[port 2024]
    addHeader Alt-Svc: h3=":2024"; ma=3600
    [secure]
       cert cert/quicui.crt
       key cert/quicui.key

[port :udp:2024]
    docker h3
    [secure]
       cert cert/quicui.crt
       key cert/quicui.key

    [city *]
        [town /]

        [club *] ②
            docker httpWarp
            destCity :unix:/tmp/hoge
            destTown /

HTTP/3サーバーに関する注意事項

BayServerだからと言うわけではなく、一般的にHTTP/3サーバーを動かす場合にはいろいろ注意事項があります。

Chromeでの注意事項

基本的にオレオレ証明書では動かせないと思ってください。

どうしてもオレオレ証明書でも動かしたい場合は、Chromeの起動オプションが必要になります。ただし、HTTP/1(またはHTTP/2)サーバからの誘導(代替サーバとしてのHTTP/3の使用)はできません。

オプション機能
–origin-to-force-quic-on={Host:Port}特定のホストポートに対するアクセスはHTTP/3サーバーにダイレクトに接続する。
–ignore-certificate-errors-spki-list={Hash}指定したハッシュ値を持つ証明書は信頼する

証明書のハッシュ値は以下のようにして求めます

$ openssl x509 -noout -pubkey -in {FileName} |   openssl pkey -pubin -outform der  |
    openssl dgst -sha256 -binary | base64

Firefoxでの注意事項

Firefoxは必ずHTTP/1サーバ(またはHTTP/2サーバ)にアクセスし、Alt-SvcヘッダによってHTTP/3サーバにアクセスします。HTTP/3サーバに直接アクセスさせるオプションはありません。

なお、証明書に関する制限はありません。(オレオレ証明書の場合警告は出るが)

代替サーバのホスト、ポート番号に関する制限

HTTP/1(またはHTTP/2)サーバのポート番号とHTTP/3サーバのポート番号は揃っていた方が無難かと。

揃っていない場合の動作はサポートされるのかよく分かりません。もっと言うとホスト名が違う場合の動作がサポートされるのかもよく分かりません。

動かしてみて判断してください。

Twitterでフォローしよう

おすすめの記事