LiteSpeedで、QUICとHTTP/3を有効にする

LiteSpeedで、QUICとHTTP/3を有効にする

2021年2月17日
ツール
Pocket

LiteSpeedに、Webサーバを変更しました。

nginxから第4のWebサーバLiteSpeedに変更する
当ブログは、さくらのVPSに、WordPressで運用をしています。 Core Web Vitalsが、5月からGoogleの検索ランキング要因として導入される…
zaitakukinmu.com

LiteSpeedは、HTTP/3に対応しているようです。

HTTP/3(略称: H3)は、HTTP/2に続くハイパーテキスト転送プロトコルの3つ目のメジャーバージョンである。バイナリデータのやり取りに使われる。HTTP/3 は RFC ドラフト「Hypertext Transfer Protocol(HTTP) over QUIC」をベースとしている[1]。

https://ja.wikipedia.org/wiki/HTTP/3

ちょっとプロトコルの部分詳しくないのですが、HTTP/1からHTTP/2にした場合、めっちゃ早くなったので、さらに早くなるのでは?といった印象です。

tensorflow.jsを使って、ブラウザ側で画像を判定をするものを作成しようとしたのですが、自分のサイトではものすごくモデルのロードに時間がかかるのに、よそのサイトでは早かったのでHTTP/3対応に行き着きました。

LiteSpeedで、QUICとHTTP/3を有効にする
model.jsonの通信

LiteSpeedは対応しているかどうか調べてみると既に対応しているようで、ファイアーウォールをあけてあげないと有効にならないようです。

現状確認

上記ページのコマンド通り確認していきます。

# netstat -lupn | grep 443
udp        0      0 0.0.0.0:443             0.0.0.0:*                           1728/openlitespeed
udp        0      0 0.0.0.0:443             0.0.0.0:*                           1728/openlitespeed

確かに、サーバ側は、待ち構えていそう。

もしかしたら、開放済みかもしれないので、以下コマンドで確認をしていきます。

STEP1

UDP 443 ポートが開いている他のサーバーから、Web サイトがホストされているサーバーに 1 バイトの UDP パケットを送信します。

ローカルのPCからやってみます。以下の通り大丈夫そうです。

# nc -z -v -u 49.212.86.61 443
Connection to 49.212.86.61 port 443 [udp/https] succeeded!

STEP2

ウェブサイトがホストされているサーバーでUDPパケットが正常に到着しているかを確認します。

# tcpdump -i eth0 -A -s0 port 443 and udp
-bash: tcpdump: コマンドが見つかりません

tcpdumpコマンドが入っていませんでした。インストールします。

# yum install tcpdump

再度コマンドを実行して、受信しているか確認します。

# tcpdump -i eth0 -A -s0 port 443 and udp
ブラウザからアクセスしてみて、通信が発生するか確認します => 何も起こりません。

上記を、TCP/443に変えて、ブラウザでアクセスすると、通信内容のダンプが流れます。

tcpdump -i eth0 -A -s0 port 443 and tcp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

23:52:25.467908 IP XXXXXXXXXXXXXXXx > YYYYYYYYYY.https: Flags [P.], seq 4053636457:4053636715, ack 3196568643, win 2048, options [nop,nop,TS val 235613387 ecr 4175846586], length 258
E..6..@.6.~.~c.31.V=.u.....i...C....e......
..,...\......M.....~.wx\.Q.@D..g.O7.8)R.}07...tW.e$9D...GF.z>...l..+...a....?!..R*.7../.. ....	.m....N	A.BW>...........}\Fy	..*o........W|.!..WJ..2a..

以下のサイトでも、同様のチェックができるようです。

Is my site using HTTP3? Check HTTP3 service on any URL. Test QUIC service, too.
http3check.net

設定変更

この時点で、どちらで確認しても、HTTP/3通信できていないようなので、ポートを開けます。

firewall-cmd --zone=public --add-port=443/udp --permanent
firewall-cmd --reload

変更後確認

再度、チェックサイトで確認してみます。

以下のように、どちらもサポート状態になりました。

LiteSpeedで、QUICとHTTP/3を有効にする

実際に、サイトにアクセスしてデータ通信のプロトコルを確認するとhttp/3になっていません。

以下のchrome拡張を入れて、googleのサイトにアクセスすると以下のように表示されます。

LiteSpeedで、QUICとHTTP/3を有効にする
An indicator button for HTTP/2, SPDY and QUIC support by each website.
chrome.google.com
LiteSpeedで、QUICとHTTP/3を有効にする

自分のサイトでは、以下の通りhttp/2の通信になっています。

LiteSpeedで、QUICとHTTP/3を有効にする

サーバ再起動

ここで管理画面から、LiteSpeedを再起動します。

再度、アクセスしてみると、以下のようにhttp/3の通信表示が出るようになりました。

LiteSpeedで、QUICとHTTP/3を有効にする

h3-29ではなく、h3-Q050になっています。

この違いは、h3-Q050がGoogleが作成したもので、h3-29が、IETF QUICといって今後標準化されるもののようです。

チェックサイトの一覧の中に、h3-29が含まれていないのが確認できます。

LiteSpeedで、QUICとHTTP/3を有効にする

「Google QUIC Q050」をサポートするサーバーが「IETF QUIC」へアップデートする時間的猶予を確保するため、当面の間「Chrome」は「IETF QUIC h3-29」と「Google QUIC Q050」の両方を積極的にサポートしていくとのこと

https://forest.watch.impress.co.jp/docs/news/1281840.html

うまく行かない場合

以下のページの対応を参考にしてみてください。