mod_deflateを設定 効果を確認


サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

ブログサイトを運用しているということはサイトのパフォーマンスを高める必要があります。
そこで、以前はxcacheを設定しましたが、今回もエンジニアらしくwordpressのプラグインは利用せずApacheのmod_deflateを設定してみようと思います。

mod_deflateとは

クライアントにデータを送る前にサーバー側でコンテンツを圧縮してから送信する機能のことです。

画像ファイルは元から圧縮されていることが多いのであまり効果はありませんが、
特にテキストなどのファイルの圧縮には効果的で効果は高いといわれています。

しかし、弱点が少しあって、サーバ側で圧縮されたファイルを解凍できない一部のブラウザが存在しており、解凍できないブラウザでは文字化けなどおきることがあります。
そのためApacheの設定に一部のブラウザに対しては圧縮をしない設定が必要になります。

まずは設定前のパフォーマンスを計測

まずは、 http://www.webpagetest.org のサイトで計測をします。
設定前の結果は下の画像のとおりです。
mod_deflate
続いて設定に移っていきたいと思います。

実際に設定をしてみる

実際に設定を行うのは大きく言って3つくらいです。

1 .“mod_deflate.so” が有効になっているかを確認
2 . http.confを編集
3 . apacheの再起動

まずは“mod_deflate.so” が有効になっているかを確認します。
僕の場合はRPM版のApache(バージョン2.2.15)を使用しているので、だいたい172行目にモジュールが入っていることを確認しました。

# vim -R /etc/httpd/conf/httpd.conf + 172

(mod_deflate.soのモジュールが読み込まれていることを確認)
 LoadModule deflate_module modules/mod_deflate.so

続いてhttp.confを編集を編集をします。

# vim /etc/httpd/conf/httpd.conf
(以下の6行を任意の場所に追加します。)

SetOutputFilter DEFLATE
DeflateCompressionLevel 9
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

設定の説明を少ししておきます。

設定 説明
SetOutputFilter DEFLATE 圧縮を有効にします。
BrowserMatch 各種ブラウザにあわせて圧縮するかしないかを設定しています。
圧縮されたコンテンツを解凍できない非対応ブラウザも存在していて文字化けなどの不具合を発生することも予想されます。
IEやFireFoxなどの有名なブラウザは当然のように解凍機能があるので、
IEとMozilla系のみに対して圧縮を行うようにします。
SetEnvIfNoCase JPG、PNG、GIFなどの画像データはもともと圧縮されていて
圧縮してもほとんど減らないので、ほとんど効果のないもに対して
CPUリソースを割り当てるのはよくないためです。

最後にApacheの再起動をしておきます。

# service httpd restart
設定後に計測をして成果を確認

再度、 http://www.webpagetest.org のサイトで計測をします。
結果は以下の画像のとおりです。
mod_deflate

残念なことに設定前の計測結果と、設定後の計測結果が同じになってしまいました。
予想では “Compress Tranfer” に変化があることを期待していましたがダメでした。
まだ何かかが足りないのだと思いますが、今後の課題として取り組んでいきたいと思います。

Leave a Reply

Your email address will not be published. Required fields are marked *