Apacheのmod_deflateを有効にしてサイトの表示を高速化する方法

Apacheのmod_deflateとは何か?

Apacheのモジュールの一つである「mod_deflate」はブラウザにコンテンツを返すときに、コンテンツを圧縮して送るための仕組みです。コンテンツを圧縮することにより転送量を減らし、ユーザ側から見るとサクサク動くサイトということになります。サーバ側としても転送量が減るので転送量に制限がある場合に大変役立ちます。

もちろん、限界もあります。mod_deflateで圧縮する効果があるのは主にテキストファイルです。画像などの既に圧縮されたバイナリデータを送信するときには、殆ど圧縮されないので、圧縮と展開に掛かる時間が無駄になってしまいます。ここでは、無駄にならないように圧縮すべきファイルのみ圧縮する方法について説明していきます。

Apacheにmod_deflateを設定する流れ

  1. httpd.confに追記
  2. Apacheを再起動

以上です。とても簡単なので、一度やってみましょう。
ちなみに、httpd.confは壊しても大丈夫なようにバックアップを忘れずに!

Apacheのhttpd.confにmod_deflateの設定を追加

いろいろなサイトを巡ってみて、最終的に行き着いた結論がコレです。
httpd.confの末尾に追記してください。

<IfModule mod_deflate.c>
     SetOutputFilter DEFLATE

     # Mozilla4系などの古いブラウザで無効、しかしMSIEは除外
     BrowserMatch ^Mozilla/4\.0[678] no-gzip
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

     # gifやjpgなど圧縮済みのコンテンツは再圧縮しない
     SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
     SetEnvIfNoCase Request_URI _\.utxt$ no-gzip

     # htmlやcssなどは圧縮
     AddOutputFilterByType DEFLATE text/plain
     AddOutputFilterByType DEFLATE text/html
     AddOutputFilterByType DEFLATE text/xml
     AddOutputFilterByType DEFLATE text/css
     AddOutputFilterByType DEFLATE text/javascript
     AddOutputFilterByType DEFLATE application/xhtml+xml
     AddOutputFilterByType DEFLATE application/xml
     AddOutputFilterByType DEFLATE application/rss+xml
     AddOutputFilterByType DEFLATE application/atom_xml
     AddOutputFilterByType DEFLATE application/x-javascript
     AddOutputFilterByType DEFLATE application/javascript
     AddOutputFilterByType DEFLATE application/x-httpd-php
</IfModule>

個人の趣味に合わせて、圧縮対象を微調整してみてください。

Apacheを再起動してmod_deflateを有効にする

設定ファイルを書き換えただけではmod_deflateは有効にはなりません。
必ず再起動してください。

/etc/init.d/httpd restart

再起動後にブラウザでアクセスして、速度を確認してみてください。
実際に圧縮されているかを確認するときは、GoogleのPageSpeed Insightsが使えます。
自分のサイトから提供しているコンテンツが「圧縮が必要」と警告されていなければ、圧縮機能は適切に動作しています。FacebookやTwitterなどのサーバから提供されているデータが「圧縮が必要」として表示されるケースがありますが、これらは自分のサイトから提供しているコンテンツではありませんので、気にしなくても大丈夫です。

Apache

Posted by @erestage