apacheで1ページ当りの帯域を減らす方法(ネットワークボトルネック時のパフォーマンスアップ方法)

ネットワークがボトルネックとなりPV/minが伸びない場合はApacheでjsやcssをクライアントに圧縮転送してPV/minをアップさせる方法があります。

httpd.confに下記1行を追記
<Directory “/home/www/wwwroot”>
Options Includes ExecCGI FollowSymLinks
AllowOverride All
SetOutputFilter DEFLATE
</Directory>

ドキュメントルート直下の.htaccessを下記のように記述
SetOutputFilter DEFLATE
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|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary

gif、jpg等の画像ファイル以外を圧縮する設定になります。
圧縮転送に対応していないブラウザには非圧縮で転送を行います。

圧縮転送されているかどうかの確認方法は
httpd.confでログを吐くように設定してやります。
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i’ deflate
CustomLog “/home/logs/httpd/deflate6435_log” deflate

上の設定だとdeflate6435_log に圧縮率が記録されるようになります。

圧縮転送を使うと帯域を節約できる代わりにCPU負荷は上がります。
また、負荷試験時にはJmeterで圧縮転送を受ける設定をしてやる必要があります。

Comments are closed.