Linux2015年に発表された新しめの圧縮アルゴリズムである、Brotliを試してみたのでメモ。nginxでの導入方法と、従来の圧縮アルゴリズムであるgzipと比較した場合のメリットについてまとめました。まとめBrotliとは?Brotliの特徴brotliは2015年に発表され、その後Googleによってアップデートされたデータ圧縮アルゴリズムです。httpにおける圧縮アルゴリズムとして使われることを主な目的としています。従来から広く使われているgzipと比較して、圧縮率が向上していながら、圧縮/伸長速度は同程度を維持しています。SSL/TLSが必須となっています。どの程度圧縮率が向上しているのかは、Brotilの効果を参照。圧縮に辞書を併用しているのが特徴で、辞書には”<div/>”、”before”、”普通”などの頻繁に使われるHTMLタグや各言語の表現が約1万語入っており、圧縮をより効率的にしています。ちなみに、辞書の中身はhttps://gist.github.com/klauspost/2900d5ba6f9b65d69c8eで見ることができます。caniuse.com)IE以外の主要ブラウザは1,2年前から対応しており、大部分のクライアントが対応可能です。主要サイトでは、Google、YouTube、Facebookなどが対応しています。従来のgzipと併用することができるので、対応状況の問題はないでしょう。公式yumリポジトリからインストールしたnginxでは今のところBrotliが使えないので、ソースからビルドしてインストールすることになります。Brotliを有効にするには、ngx_brotliというモジュールを組み込む必要があります。必要パッケージのインストールnginxとngx_brotliをビルドするのに必要なパッケージをインストールします。最新版のURLを確認。インストール場所等の設定を行います。各ビルドオプションの設定内容を簡単にまとめておきます。赤字の項目は必須項目です。設定のほかにも、yumでインストールした場合自動でやってくれる作業も、手動で行う必要があります。ワーカープロセスの実行ユーザーの作成nginxというユーザーがまだ作られていなければ、作成します。起動や停止ができるように、ユニットファイルを作成します。/usr/lib/systemd/system/nginx.serviceユニットファイルは下記のように記述します。インストール場所を/opt/nginxから変更した場合は、PIDFileとExecStartのパスも変更してください。SSL関連の設定例では、デフォルトから最低限変更する必要がある項目のみを挙げています。}}Brotli関連の設定項目は、gzipの設定とよく似ています。以下、よく使うであろう設定項目の解説です。以外に圧縮の対象とするMIMEタイプを指定する。圧縮されているものは指定しないこと。20圧縮の対象となるファイルサイズの最小値を指定する。(単位:バイト)小さすぎるファイルは、効果が圧縮のオーバーヘッドに見合わないので除外する。6圧縮レベルを0~11で指定する。値が大きいほど圧縮率が向上するが圧縮速度は低下する。以上で、ngnixをBrotliに対応させる準備は完了です。動作確認nginxを起動したら、ブラウザからアクセスしてBrotliで圧縮されているか確認します。Chrome、Firefox、Edgeから確認することができます。なっていることを確認する。圧縮率について実際どれほど圧縮率が向上しているのか、gzipと比較してみました。検証には、当ブログの記事TLS1.3に対応したApache(httpd)のインストール・設定方法のHTMLファイルを使いました。Brotliの圧縮率)で算出しています。圧縮レベルが高くなるにつれて圧縮率は向上し、レベル5以上になると圧縮率が1割強向上しています。gzipの場合、ある程度までレベルが上がるとそれ以降はほとんど圧縮率が向上しないことがこの差の要因になっているようです。圧縮/伸長速度について圧縮/伸長にかかる時間は、レベル9まではgzipとほぼ同等のようですが、レベル11になると劇的に遅くなるようなので、圧縮レベルは9までに抑えておくのが無難です。利用してあらかじめ圧縮してあるファイルを転送する場合は例外です。利用してあらかじめ圧縮してあるファイルを転送する場合は例外です。コメントをキャンセル質問・感想などお気軽にどうぞ。*が付いている項目は入力必須です。メールアドレス以外の項目が公開されます。スパム防止のため、コメント反映まで少々時間がかかります。TLS1.3に対応したApache(httpd)のインストール・設定方法リンクGitHubアカウントを開設しました!当ブログ内で取り上げたコードなどを上げています。