サーバー通信データ圧縮化(Apache + mod_gzip)

mod_gzipとはApacheのモジュールの一つで、サーバーからサイト観覧ユーザーまで、コンテンツを圧縮して転送することによりネットワークの帯域を節約することが可能になります。

※ mod_gzip は Apache1系のモジュールです。Apache2系では、mod_deflateというモジュールを使用します。


# rpm -aq | grep mod_gzip ← mod_gzipがインストール済か調べる

# apt-get install mod_gzip ← Yosiの場合インストールされていなかったのでインストール
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
  apache-devel
以下のパッケージが新たにインストールされます:
  apache-devel mod_gzip
アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 1 個
223kB のアーカイブを取得する必要があります。
展開後に 720kB のディスク容量が追加消費されます。
続行しますか? [Y/n]y ← yを指定して [Enter]
取得:1 http://updates.vinelinux.org 3.2/i386/devel apache-devel 1.3.33-0vl2 [117kB]
取得:2 http://updates.vinelinux.org 3.2/i386/plus mod_gzip 1.3.26.1a-0vl2 [107kB]
223kB を 0s 秒で取得しました (284kB/s)
変更を適用しています...
準備中...            ########################################### [100%]
  1:apache-devel      ########################################### [ 50%]
  2:mod_gzip         ########################################### [100%]

Apacheの設定


# mkdir /etc/httpd/tmp ← 作業用ディレクトリ作成

# chown -R apache:apache /etc/httpd/tmp ← グループ、ユーザーをapacheに

# vi /etc/httpd/conf/httpd.conf ← 編集
 i キー(入力モード)

下記を追記します。

# mod_gzipの設定
LoadModule gzip_module modules/mod_gzip.so
AddModule mod_gzip.c

<IfModule mod_gzip.c>
# gzipのログフォーマット指定
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." gzip_info

# gzipのログの場所(httpdのログと分ける)
CustomLog /var/log/httpd/gzip_log gzip_info

# gzipを有効に
mod_gzip_on Yes

mod_gzip_can_negotiate Yes
mod_gzip_static_suffix .gz
AddEncoding gzip .gz
mod_gzip_update_static No
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No

# 圧縮するファイルの最小サイズ。この値より小さいファイルは圧縮しない
mod_gzip_minimum_file_size 0

# 圧縮するファイルの最大サイズ。この値より大きいファイルは圧縮しない(0は無限)
mod_gzip_maximum_file_size 0

# 圧縮に使用するメモリサイズの上限
mod_gzip_maximum_inmem_size 52000

# 作業用ディレクトリ
mod_gzip_temp_dir /etc/httpd/tmp

# GET と POST リクエストを圧縮対象にする
mod_gzip_handle_methods GET POST

# 圧縮するファイルの指定
mod_gzip_item_include mime ^application/x-httpd-cgi
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^httpd/unix-directory$
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 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 \.dat$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.pl$
mod_gzip_item_include file \.cgi$

# 圧縮しないファイルの指定
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude file \.css$
mod_gzip_item_exclude file \.js$

# サポートするHTTPプロトコル。1000ならHTTP/1.0以降、1001ならHTTP/1.1以降
mod_gzip_min_http 1001
</IfModule>


追記したら Esc キー(コマンドモード):wqで保存

# /etc/init.d/httpd restart ← 再起動
httpdを停止中:                [ OK ]
httpdを起動中:                [ OK ]

ログローテーションの設定




# vi /etc/logrotate.d/apache ← 編集
 i キー(入力モード)

下記を追記します。

/var/log/httpd/gzip_log {
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

追記したら Esc キー(コマンドモード):wq で保存

データ圧縮の確認

※ まず最初に自分のサイトにアクセスをします。


# tail /var/log/httpd/gzip_log ← ログの確認
11.222.333.444 - - [01/Dec/2005:15:57:23 +0900] "GET / HTTP/1.1" 304 - mod_gzip:SEND_AS_IS:NO_200 In:0 Out:0: 0pct.
111.222.333.444 - - [01/Dec/2005:15:57:23 +0900] "GET /image/object/opening.jpg HTTP/1.1" 304 - mod_gzip:DECLINED:EXCLUDED In:0 Out:0: 0pct.

ログを確認したら今度はこちらのサイトで確認します。

「Enter URL」に、自分のホスト名(例:xxxxx.com)を入力、
次に「goボタン」を押したら、別ウィンドウのページが開きます。

Summary:の項目で

Compression status: Compressed (gzip)

と表示されていればきちんと圧縮できていると言う事です。

File Size Comparison (in bytes):
この項目では、圧縮前後でのファイルサイズや圧縮率を確認する事ができます。

Speed Comparison by Connection Type (in seconds):
この項目では、圧縮前後での通信速度を確認する事ができます。

これらの項目をチェックして、どれくらい圧縮による効果があるか確認します。




Copyright c Vine Linuxで自宅サーバー. 2004 All Rights Reserved.