Apacheのmod_deflateを有効にしてサイトの表示を高速化する方法
Apacheのmod_deflateとは何か?
Apacheのモジュールの一つである「mod_deflate」はブラウザにコンテンツを返すときに、コンテンツを圧縮して送るための仕組みです。コンテンツを圧縮することにより転送量を減らし、ユーザ側から見るとサクサク動くサイトということになります。サーバ側としても転送量が減るので転送量に制限がある場合に大変役立ちます。
もちろん、限界もあります。mod_deflateで圧縮する効果があるのは主にテキストファイルです。画像などの既に圧縮されたバイナリデータを送信するときには、殆ど圧縮されないので、圧縮と展開に掛かる時間が無駄になってしまいます。ここでは、無駄にならないように圧縮すべきファイルのみ圧縮する方法について説明していきます。
Apacheにmod_deflateを設定する流れ
- httpd.confに追記
- 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などのサーバから提供されているデータが「圧縮が必要」として表示されるケースがありますが、これらは自分のサイトから提供しているコンテンツではありませんので、気にしなくても大丈夫です。