nginx で gzip 圧縮を有効化して通信帯域を節約する

Web サイト

Web サーバーが送るデータが少しでも速く届くように nginx で gzip 圧縮を有効化しました。

コンテンツを gzip 圧縮で送ることでデータ量を減らして体感的な応答速度向上を図ります。


自分の Web ページを PageSpeed Insights を使って計測してみたところ、指摘された項目のひとつに『圧縮を有効にする』というのがありました。

HTML などのコンテンツデータは圧縮するとデータ量が大きく削減されて、データ量に比例して時間がかかるネットワーク通信速度を実質的に向上させることが可能です。

利用している nginx でも gzip 圧縮機能があるので、今回はそれを有効化してみることにしました。

nginx をインストールしたときのお話は こちら で紹介しています。

gzip 圧縮を有効化する

nginx で gzip 圧縮を有効化するには /etc/nginx/nginx.conf に次の項目を設定します。

gzip on;
gzip_types text/css application/javascript text/xml text/plain application/json application/rss+xml application/xhtml+xml application/postscript application/rtf application/pdf application/atom+xml application/x-perl text/x-component;

設定としては、まず gzip の値を on に設定します。

その上で gzip_types に、gzip 圧縮して送信したいコンテンツの MIME タイプを指定します。このとき、複数の MIME タイプを空白区切りで指定できます。また、text/html は明記しなくても圧縮して送信されるそうです。

圧縮対象にする MIME タイプ

nginx がサポートしている MIME タイプは /etc/nginx/mime.types に記載されています。

ここを見ると、どの拡張子に対してどんな MIME タイプが指定されているかがわかるので、この中から自分が扱うコンテンツで圧縮したいものを、先ほどの gzip_types で指定することになります。


もともと圧縮済みのファイル形式の場合は gzip 圧縮しても効果が期待できないので、テキスト形式のものを指定すると良さそうです。

特に Web で頻繁に使われる text/csstext/javascript 、有名どころの text/xmltext/plainapplication/rss+xml といったあたりは圧縮しておいて良いかもしれません。

また、人によっては公開することのある application/pdf も圧縮する価値はありそうです。

PageSpeed Insights の検証結果

ところで、このようにして nginx を gzip に対応させても、依然として PageSpeed Insights では次のような報告が残されていました。

https://static.xx.fbcdn.net/rsrc.php/v2/yl/r/wms6fAzZseB.js を圧縮すると 216.7 KB(72%)削減できます。

詳しくたどる方法は分からなかったのですけど、どうやらこれは Facebook の『いいね!』ボタンを組み込むのと合わせて読み込まれるスクリプトのようです。

実際、"http://connect.facebook.net/ja_JP/all.js" を HTML に含めないようにするとこのファイルも含まれないようになる様子なので、おそらく間違いなさそうです。

他のサーバーにある JavaScript では、こちらから圧縮しようがないので、とりあえずこの報告メッセージは無視しておくしかなさそうです。