【Nginx】Brotli圧縮を使えるようにしてみた

クライアント(webブラウザなど)からwebサーバーに対してリクエストが来た場合、webサーバーはデータを圧縮してからクライアントに返します。
(クライアントから「圧縮してくれてもいいよ」という申し出があった場合)

そうすることでネットワークを流れるデータ量を小さくすることができて通信量の削減及び通信時間の短縮に繋がります。
(圧縮されたデータを元に戻すのはクライアントの仕事です)

このデータ圧縮のアルゴリズムとして一般的には「gzip圧縮」が使われるのですが、それよりも圧縮率が高いと言われているのが「Brotli圧縮」です。

gzip圧縮と同程度の圧縮/展開時間でありながら圧縮率が高いのであれば使わない手はないだろうということで当ブログのwebサーバーでも使えるようにしてみました。

目次

前提条件

  • Nginxをwebサーバーとして使用していること
  • Nginxをソースコードからビルドできる知識を有すること
  • サイトはSSL/TLSに対応していること

Brotli圧縮の有効化手順

gzip圧縮の場合はconfファイルで簡単に有効化できますが、Brotli圧縮を有効化するにはソースコードからのビルドが必要になります。

STEP
Nginx用Brotli圧縮モジュールの取得

以下のコマンドを実行して適当なディレクトリにモジュールを展開します。
今回は「/usr/local/src」配下に展開します。

cd /usr/local/src
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
STEP
Nginxのビルド

Nginxをソースコードからビルドしてインストールします。
その際、configureに渡すオプションに「–add-module=/usr/local/src/ngx_brotli」を追加します。

Nginxのビルドについてはこちらの記事を参考にしてください。

STEP
設定ファイルに追記

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;

記事を初めて公開した際、brotli_comp_levelは9としていましたが、詳しい方からアドバイスをいただきまして7に変更いたしました。
アドバイス、ありがとうございました。

STEP
Nginxの再起動

以下のコマンドでNginxなどを再起動します。

sudo systemctl restart nginx sudo systemctl restart php-fpm

以上でBrotli圧縮が有効になります。


まとめ

当ブログにおいてgzip圧縮とBrotli圧縮を比較したところ、転送されるファイルのサイズは以下のようになりました。

圧縮方式ファイルサイズ
gzip4.6MB程
Brotli4.1MB程

レスポンスヘッダーを見てもきちんとBrotli圧縮されていることが分かります。

Content-Encoding: br

ソースコードからのビルドが必要になるので若干手間はかかりますが、機会がありましたらぜひ試してみてください。

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次