NginxでHTTP/2を有効にするのは設定一発で本当に簡単だ。一方でNginxを有効にしているのにHTTP/1.1がログに出ることがある。ググった所触れられているサイトがなかったので記録として残す。
#NginxでHTTP/2を有効にする方法
なぜHTTP/2にするかはここでは触れない。Googleのサイト監査ツールLighthouseでHTTP/2を使えと推奨されたりする。Nginx1.9.5以降では設定するだけでHTTP/2を使えるようになる。
#Nginx設定
https://dassur.ma/things/h2setup/ にある通り。listen 443の行にhttp2を足して再起動するだけ。
server {
listen 443 ssl http2 default_server;
ssl_certificate /path/to/server.cert;
ssl_certificate_key /path/to/server.key;
# ...
# Copy from the HTTP server
# ...
}
#HTTP/1.1が残る現象
Lighthouseで再検証する...と例えばこんなログが出てHTTP/1.1が残ってるじゃねーか!と指摘される。
#何が起きているか
Chromeのdeveloper modeでログを眺めると304Not Modified http/1.1となっている。304Not Modifiedは例えばjpgにキャッシュ期間を設定している場合に「更新なし」だよというレスポンスでブラウザはローカルキャッシュを使用する。このstatusが定義されているRFCがHTTP/1.1なのでHTTP/2ではないログが出てしまう(が問題ない)。
304 Not Modified - HTTP | MDN https://developer.mozilla.org/ja/docs/Web/HTTP/Status/304