Apacheで配信されるWebコンテンツは,画像であればページ管理者の手によって圧縮率を高めファイル容量を小さくすることが可能だ。さらに,ほかの手段としては,サーバ側の設定であらかじめ圧縮を行ってから配信するという方法がある。これであればテキストファイル(HTMLファイル)のファイル容量も小さくすることができ,帯域を節約させることが可能だ。
使用する条件としては,圧縮をするためにサーバ側のCPUパワーが多少消費されることと,ページを見る側にgzipを解凍するブラウザ環境が必要となる(IE5.x/6.xであれば問題は無い)。
まず最初に,自分の環境でモジュール組み込みが容易にできるDSO(Dynamic Shared Object)をサポートする環境であるかを確認しよう(動的にモジュールを組み込める状態)。次のように,「mod_so.c」という文字列が見られればよい(最近のディストリビューションではDSO環境になっている)。
# httpd -l Compiled-in modules: http_core.c mod_so.c suexec: enabled; valid wrapper /usr/sbin/suexec |
mod_gzipは,次のサイトからダウンロードしよう。ここではソースコード(mod_gzip 1.3.19.1a - Complete source code as a 'C' code download. )を選択した。
・HSC's mod_gzip for Apache Web Server
ここではwgetでダウンロードを行い,apxsコマンドでモジュールを組み込む手順を挙げている(入力するのは黄色文字の個所)。
# wget http://www.remotecommunications.com/apache/mod_gzip/ src/1.3.19.1a/mod_gzip.c ←実際は1行で # apxs -i -c mod_gzip.c gcc -DLINUX=22 -DEAPI -DEAPI_MM -O2 -march=i386 -mcpu=i686 -fPIC -DEAPI_MM_CORE_PATH=/var/run/httpd.mm -fpic -DSHARED_MODULE -I/usr/include/apache -c mod_gzip.c gcc -shared -o mod_gzip.so mod_gzip.o cp mod_gzip.so /usr/lib/apache/mod_gzip.so chmod 755 /usr/lib/apache/mod_gzip.so |
上記のように表示されインストールが終了したら,次にApacheの設定ファイルにmod_gzipの設定を行おう。
LoadModule,AddModuleそれぞれの挿入個所は,参考Tips「Apacheに組み込まれているモジュール一覧が知りたい」を参考にして,それぞれのまとまりの最後にでも追加すればよい。<IfModule...は,上記モジュール行以降であれば任意の個所で構わない。
# vi /etc/httpd/conf/httpd.conf ←RPMパッケージの場合のパス ........中略....... LoadModule gzip_module modules/mod_gzip.so ........中略....... AddModule mod_gzip.c ........中略....... <IfModule mod_gzip.c> LogFormat "%h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_compression_ratio}npct." common_with_mod_gzip_info LogFormat "%h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n:%{mod_gzip_compression_ratio}npct." common_with_mod_gzip_info2 CustomLog /var/log/httpd/gzip_log common_with_mod_gzip_info2 mod_gzip_on Yes mod_gzip_dechunk yes mod_gzip_minimum_file_size 300 mod_gzip_maximum_file_size 0 mod_gzip_maximum_inmem_size 60000 mod_gzip_keep_workfiles No mod_gzip_temp_dir /tmp mod_gzip_item_include mime ^application/x-httpd-cgi mod_gzip_item_include mime ^application/x-httpd-php mod_gzip_item_include handler ^perl-script$ mod_gzip_item_include handler ^server-status$ mod_gzip_item_include handler ^server-info$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^httpd/unix-directory$ mod_gzip_item_exclude mime ^image/.* mod_gzip_item_include file \.shtml$ mod_gzip_item_include file \.htm$ mod_gzip_item_include file \.html$ mod_gzip_item_include file \.txt$ mod_gzip_item_include file \.php$ mod_gzip_item_include file \.pl$ mod_gzip_item_include file \.cgi$ mod_gzip_item_exclude file \.css$ mod_gzip_item_exclude file \.js$ mod_gzip_min_http 1001 </IfModule> |
上記の設定をそのままhttpd.conf内に貼り付けてもよいだろう。注意しておきたいのは,圧縮候補の設定とファイル容量に関する設定項目だ。ここでは,HTTP/1.1での接続が対象であり,画像ファイルは圧縮対象から外していることが分かるはずだ。下記に最低限知っておきたい設定項目を挙げてみた。
|
設定後は,次のようにhttpdを再起動させよう。
# /etc/rc.d/init.d/httpd restart |
再起動後は,「Apacheの働きぶりをリアルタイムに確認したい」Tipsなどの手段で「mod_gzip/....」の文字列が見られれば,動作していると判断ができる。
Server Version: Apache/1.3.22 (Unix) (Red-Hat/Linux) mod_ssl/2.8.5 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_gzip/1.3.19.1a |
また,上記のhttpd.conf内設定でログファイルを作成するよう設定したので,次のように指定すれば圧縮状況を確認することが可能だ。
# tail /var/log/httpd/gzip_log .........中略........... 192.168.0.2 - - [13/Apr/2002:23:48:57 +0900] "GET /images/mail_icon.gif HTTP/1.1" 304 - mod_gzip: DECLINED:EXCLUDED In:0 Out:0:0pct. 192.168.0.2 - - [13/Apr/2002:23:48:57 +0900] "GET /inframe_index.html HTTP/1.1" 200 1797 mod_gzip: DECHUNK:OK In:5626 Out:1797:69pct. 192.168.0.2 - - [13/Apr/2002:23:48:57 +0900] "GET /inframe_link.html HTTP/1.1" 200 3924 mod_gzip: DECHUNK:OK In:13782 Out:3924:72pct. |
ログに見られる「pct.」は圧縮率だ。例えば,最後の行の/inframe_link.htmlファイルは,元が約13.8Kバイトだったものが約4Kバイトに圧縮されて72%になったことを意味している。また,ログ内の緑で示した文字列のステータス表示には次のような意味がある。
|
この圧縮ログをそのまま記録させていくならば,次のようにlogrotateの候補に追加させておこう。
# vi /etc/logrotate.d/apache /var/log/httpd/access_log /var/log/httpd/gzip_log /var/log/httpd/error_log { missingok sharedscripts postrotate /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true endscript } .......以下略........ |
ほかにも「mgstat」と呼ばれるツールを利用すれば,smod_gzipの圧縮状況をグラフ化することで視覚的に確認することが可能だ。
「Mgstat」サイトから入手しよう
$ tar zxfv mgstat-0.10.tar.gz $ cd mgstat-0.10 $ ./configure $ su # make;make install # /usr/local/bin/mgstat -l /var/log/httpd/gzip_log -d /var/www/html/mgstat -s GALAXIES.jp |
上記のようにインストールを行い,「-l」でログファイルを,「-d」で書き出し先のディレクトリを指定する。すると,このようなページが作成されるのだ。日々の圧縮割合を把握するには最適だろう。
Copyright © ITmedia, Inc. All Rights Reserved.