apacheのデフォルト状態ではコンテンツの転送(いわゆる通信内容)はサーバにあるコンテンツの大きさをそのままの状態で皆様の所に送信しています。
この場合、大きなコンテンツの場合はサーバ側では転送に、クライアント(皆様側)では受信に時間がかかってしまいます。
以下の設定を行うことにより、サーバ側で送信する前にコンテンツを圧縮し転送量を減らす事ができます。
(但し、クライアント側では、HTTP 1.1に準拠していなければなりません。準拠していない場合は、文字化け等の障害もありますのでご注意ください)
モジュール組み込みの確認 # cat /etc/httpd/conf/httpd.conf | grep mod_deflate LoadModule deflate_module modules/mod_deflate.so 上記のmod_deflate.soが定義されている事を確認します。 定義されていない場合、インストール等の方法は紹介致しません。 ソースからのコンパイル等で紹介されているサイトをご参照ください。 apache設定ファイルの変更 # vi /etc/httpd/conf/httpd.conf 最下位行に以下を追加します コンテンツ圧縮の設定 <Location /> SetOutputFilter DEFLATE </Location> 圧縮率の設定 DeflateCompressionLevel 5 圧縮率は1〜9で設定します 低圧縮(1)〜高圧縮(9)で指定できますが、高圧縮になるにつれサーバCPU使用量が高くなります 圧縮ログの設定 DeflateFilterNote Input incontents DeflateFilterNote Output outcontents DeflateFilterNote Ratio ratio LogFormat '"%r" %{outcontents}n/%{incontents}n (%{ratio}n%%) %{User-agent}i' deflate CustomLog logs/access_deflate deflate apacheの再起動 【FC1 から Fedora15 / CentOS4 / CentOS5 / CentOS6 の場合】 # /etc/rc.d/init.d/httpd restart 【Fedora16以降 の場合】 # systemctl restart httpd.service |
apacheを再起動したら、通常通りコンテンツ(サーバ)へアクセスします。
ナローバンド等であれば体感できる程のアクセス速度ですがブロードバンドでは、それ程体感できないかもしれません。
どれ位圧縮転送出来たか確認 # cat /var/log/httpd/access_deflate "GET /apache_conf.shtml HTTP/1.1" 22138/67619 (32%) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Lunascape 3.1.0) "GET /image/apache.gif HTTP/1.1" -/- (-%) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Lunascape 3.1.0) 一部抜粋していますが、apache.shtmlに対して本来の大きさ(67691Byte)に対して転送バイトは(22138)となり 32%の圧縮で転送されているのが分かります。 apache.gif等の画像系(*.jpeg等)は元々が圧縮されている為、効果は得られません。 |
圧縮ログのコメント化(先頭に#を付けてコメント化) #DeflateFilterNote Input incontents #DeflateFilterNote Output outcontents #DeflateFilterNote Ratio ratio #LogFormat '"%r" %{outcontents}n/%{incontents}n (%{ratio}n%%) %{User-agent}i' deflate #CustomLog logs/access_deflate deflate |