新しい圧縮アルゴリズムBrotliをnginxで試す

  • 37
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事は、nginx Advent Calendar 2015の1日目の記事です。

Brotli

BrotliはGoogleが最近公開した新しい圧縮アルゴリズムとその実装です。zopfliと違って従来のよく利用されているdeflateアルゴリズムと互換性はありませんが、deflateアルゴリズムと同じくくらい高速でなおかつ圧縮率がさらに向上しているのが特徴です。

今回はこのBrotliによるコンテンツ圧縮をnginxで利用する方法について紹介します。

ngx_brotli

ngx_brotlingx_http_gzip_moduleおよびngx_http_gzip_static_moduleのbrotli版に相当するnginxモジュールです。以下のようにnginxでgzip圧縮をしたことがある人ならなんとなくどう使うかわかるディレクティブがあります。(ディレクティブはほかにもいろいろとあります。詳しくはngx_brotliのREADME.mdを参照して下さい)

ディレクティブ名 解説
brotli on | off brotliによる圧縮を有効/無効にする
brotli_types mime-type ... 圧縮対象のMIME typeを列挙する
brotli_static on | off | always 事前にbrotliで圧縮したファイルを配信する

libbrotliをインストールする

ngx_brotliをインストールするには事前にlibbrotliをインストールする必要があります。

$ git clone https://github.com/bagder/libbrotli
$ cd libbrotli
$ ./autogen.sh
$ ./configure
$ make
$ sudo make instlal

ngx_brotliをインストールする

続いてngx_brotliをインストールする。nginxのモジュールはnginx本体と一緒にビルドしなければならないのでここではnginx-buildを使ってインストールする。

$ brew tap cubicdaiya/nginx-build
$ brew install nginx-build
$ echo "[ngx_brotli]\nform=git\nurl=https://github.com/google/ngx_brotli.git" > modules3rd.ini
$ nginx-build -d work -v 1.9.7 -m modules3rd.ini
$ cd work/nginx/1.9.7/nginx-1.9.7
$ sudo make install

次にnginx.confに以下の設定を書く。

server {
    listen 8080;
    root html;
    brotli on;
}

これでリクエストヘッダにAccept-Encoding: brを付けてindex.htmlをリクエストすると、

$ curl -H "Accept-Encoding: br" -I http://127.0.0.1:8080/index.html
HTTP/1.1 200 OK
Server: nginx/1.9.7
Date: Mon, 30 Nov 2015 14:41:29 GMT
Content-Type: text/html
Last-Modified: Wed, 06 Aug 2014 17:07:04 GMT
Connection: keep-alive
ETag: W/"53e260b8-264"
Content-Encoding: br
$

という具合にContent-Encoding: brとなってるのが確認できます。

この投稿は nginx Advent Calendar 20151日目の記事です。