充分な転送速度が得られない環境において、何とかレスポンス速度を上げることができないか、ということで、mod_deflateを使用してみることに(サーバーのCPUリソースにある程度の余力がないと、逆にそっちがボトルネックになってしまいますが)。
画像とか動画とかを大量に使用している場合、deflateの効果はほとんどありませんが、Tracのチケット運用のように、テキストが多い場合は効果が見込めるはず(もちろん、zip等の添付ファイルのダウンロードには効果はありませんが)。
懸念点としては、mod_pythonと組み合わせてきちんと動くのか否か? どうも、mod_pythonでTracを運用している環境でもmod_deflateを使っている、という話を見かけないので・・・(単に、あまりにも普通に設定できてしまうので、敢えて書くまでもないだけなのかもしれませんが)。
まずは、mod_deflateが組み込まれていることを確認。
LoadModule deflate_module modules/mod_deflate.so
続いて、delfateの設定・・・なのですが、最初、httpd.confの中にそのまま書いて、deflateが反応してくれないという状況に。理由は、SSLで運用しているため、正しくはそちら側に設定する(VirtualHostでポート443を分けている)必要があっただけですが(^^;
気を取り直して、SSLの設定を行っているssl.confに記述。
基本設定はこんな感じ。この部分の設定は、VirtualHostの外側に記述(なので、この部分は別にhttpd.confなどに記述しても問題ないはず)。リクエストURLが gif/jpg/jpeg/png/zip/lzh/gz のいずれかで終わる場合、deflateの対象外となるようにしています。
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE\s(5\.5|6\.0) no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|gz)$ no-gzip dont-vary
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '%h %u %t "%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
VirtualHostディレクティブ内でログ出力を実施。
CustomLog logs/ssl_deflate_log deflate
Tracは、/trac ~にマッピングしているため、Locationディレクティブでdeflateの対象に(VirtualHost内に記述)。
<Location /trac>
SetOutputFilter DEFLATE
Header append Vary User-Agent env=!dont-vary
</Location>
なお、この部分はTracの設定を行っているconfファイル側に記述しても問題ないはず(そっちでもLocationの設定は行っているので)。この辺は、好みの問題かと(コンテンツ(Trac)を基準に設定を記述するか、機能(deflate)を基準に設定を記述するか)。
ちなみに、テスト環境で試してみたところ、Ticket閲覧においては20~25%のサイズに圧縮されていました。もちろん、カスタムフィールドの内容など、環境に依存する内容ではありますが、元のサイズが35KB~40KB程度あるので(思いの外大きくてちょっとびっくり)、1/4~1/5程度に圧縮できるってのは結構効果ありそう。
ちなみに、同一のサーバーでは他にSubversionなども運用しておりますが、今回は適用外としております。ただ、検証の時間の都合で見送っているだけなので、Subversion側にも適用の効果があるかどうか、いずれ調べてみる予定。
参考:
・【帯域対策】Apacheのモジュールmod_deflateで転送量を大幅削減!
・WEB+DB PRESS vol.59
#WEB+DB PRESSでmod_deflateの話が掲載されていて、「そういえば、そんな機能もあったなぁ~」って思い出しました(^^;
Recent Comments