クライアント(webブラウザなど)からwebサーバーに対してリクエストが来た場合、webサーバーはデータを圧縮してからクライアントに返します。
(クライアントから「圧縮してくれてもいいよ」という申し出があった場合)
そうすることでネットワークを流れるデータ量を小さくすることができて通信量の削減及び通信時間の短縮に繋がります。
(圧縮されたデータを元に戻すのはクライアントの仕事です)
このデータ圧縮のアルゴリズムとして一般的には「gzip圧縮」が使われるのですが、それよりも圧縮率が高いと言われているのが「Brotli圧縮」です。
gzip圧縮と同程度の圧縮/展開時間でありながら圧縮率が高いのであれば使わない手はないだろうということで当ブログのwebサーバーでも使えるようにしてみました。
前提条件
- Nginxをwebサーバーとして使用していること
- Nginxをソースコードからビルドできる知識を有すること
- サイトはSSL/TLSに対応していること
Brotli圧縮の有効化手順
gzip圧縮の場合はconfファイルで簡単に有効化できますが、Brotli圧縮を有効化するにはソースコードからのビルドが必要になります。
以下のコマンドを実行して適当なディレクトリにモジュールを展開します。
今回は「/usr/local/src」配下に展開します。
cd /usr/local/src
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
Nginxをソースコードからビルドしてインストールします。
その際、configureに渡すオプションに「–add-module=/usr/local/src/ngx_brotli」を追加します。
Nginxのビルドについてはこちらの記事を参考にしてください。
Nginxの設定ファイルにBrotli圧縮に関わるパラメータを追記します。
パラメータの意味などについては以下のサイトをご覧ください。
記載例を載せておきますので参考にしてください。
(今回はserverディレクティブに追加しました)
#brotli
brotli on;
brotli_comp_level 7;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
以下のコマンドでNginxなどを再起動します。
sudo systemctl restart nginx sudo systemctl restart php-fpm
以上でBrotli圧縮が有効になります。
まとめ
当ブログにおいてgzip圧縮とBrotli圧縮を比較したところ、転送されるファイルのサイズは以下のようになりました。
圧縮方式 | ファイルサイズ |
---|---|
gzip | 4.6MB程 |
Brotli | 4.1MB程 |
レスポンスヘッダーを見てもきちんとBrotli圧縮されていることが分かります。
Content-Encoding: br
ソースコードからのビルドが必要になるので若干手間はかかりますが、機会がありましたらぜひ試してみてください。
コメント