ZiproxyでモバイルデバイスにおけるWebページの読み込みを高速化するLeverage OSS(1/2 ページ)

モバイル市場では、クライアントへのバイト転送量を少しでも減らそうとするノウハウが日進月歩で積み上がっている。本稿で紹介するZiproxyは、取得したコンテンツを圧縮してクライアントに転送するWebプロキシサーバだ。

» 2009年01月26日 08時00分 公開
[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine

 ZiproxyはWebプロキシサーバだが、コンテンツをキャッシュするSquidのようなWebプロキシとは異なり、Webから取得したコンテンツを圧縮してクライアントに転送することを目的としている。これは、携帯インターネット端末のようなモバイルデバイス向けのサービスとして役立つ。こうしたデバイスでは、元の画像の解像度や画質の高さを表示に反映できず、低速かつ通信料が割高なデータ通信プランの下でブラウザが使われるからだ。

 Ziproxyでは、画像を圧縮して画質のより低い(サイズの小さな)JPEGまたはJPEG 2000形式のファイルに変換したり、表示域を縮小した上でHTMLおよびCSSコンテンツをgzipで圧縮したりできる。JPEG 2000画像はデコードにそれなりのCPUパワーを必要とする反面、PNG画像や通常のJPEG画像に比べてかなりサイズが小さくなる。多くのWebブラウザはgzipエンコードされたコンテンツを自動的にデコードしてくれるので、エンドユーザーにはHTMLやCSSが圧縮されているかどうかは分からない。

 Ziproxyのパッケージは、Fedora、Ubuntu、openSUSEのどのリポジトリにも入っていない。ここでは、Ziproxyの最新版 2.5.2のソースを使って64ビット版Fedora 9マシンでビルドを行う。画像をJPEG 2000形式に圧縮する場合は、Ziproxyのビルド前にJasPerの開発版パッケージをインストールしておく必要がある。JasPerはopenSUSEの1-Clickインストールに対応しているほか、Ubuntu Hardy用パッケージやFedora 9用パッケージ(Fedora 9リポジトリのjasper-devel)もある。

 以下に、Ziproxyをビルドするコマンドを示す。なお、ZiproxyをJPEG 2000対応にするには、JasPerの開発版パッケージがインストール済みでも「--with-jasper」オプションを指定する必要があった。


$ tar xjf /FromWeb/ziproxy-2.5.2.tar.bz2
$ cd ./ziproxy-2.5.2/
$ ./configure --with-jasper
$ make
$ sudo make install
$ su -l
# cp -av etc/ziproxy /etc
# chown -R root.root /etc/ziproxy

 Ziproxyにはデーモンとして起動するためのinit.dファイルが付属しているが、このスクリプトを使ったZiproxyの起動には幾つか問題がある。まず、Ziproxyのパスがハードコーディングされており、「/usr/local」にZiproxyをインストールするとバイナリが見つからない。さらにひどいのは、rootでZiproxyを起動していることだ。これらの問題を解決するために、Ziproxyの実行用に新たなユーザーを作成し、起動用スクリプトを以下のように変更した。元のスクリプトでgprintfになっていた部分は“g”を消してprintfにしてある。大きな変更点は、suコマンドを使ってZiproxyを実行するようにしたことだ。


# useradd ziproxy
# mkdir /var/log/ziproxy
# chown ziproxy.ziproxy /var/log/ziproxy
# cp /.../ziproxy-2.5.2/etc/init.d/ziproxy /etc/init.d
# vi /etc/init.d/ziproxy
...
PID_FILE=/var/tmp/ziproxy.pid
ZIPROXY=/usr/local/bin/ziproxy
...
printf "Starting %s: " "${PROGNAME}"
...
su -c "${ZIPROXY} -d -c ${ZIPROXY_CONF} >${PID_FILE}" ziproxy
...
# /etc/init.d/ziproxy start

 Ziproxyはxinitdを利用して実行することも、スタンドアロンのデーモンとして実行することも可能が、ここでは後者の方法を採る。通常はその方がパフォーマンス面で有利である。xinitd経由で実行されるクライアント接続フィルタリング機能があれば、パケットフィルタリングとSSHポート転送の利用によって、インターネットからZiproxyへのアクセスのセキュリティ保護が可能になる。

 Ziproxyの起動前に、設定ファイルである「/etc/ziproxy/ziproxy.conf」の内容を確認しておこう。最初のオプションでは、Ziproxyをバインドするポートおよびアドレスを指定する。OnlyFromオプションには、Ziproxyへのアクセスを許可するIPアドレスまたはその範囲(「<始点アドレス>-<終点アドレス>」の形式)を指定する。OnlyFromの指定がないと、Ziproxyがバインドされているアドレスおよびポートに接続可能な任意のクライアントにサービスが提供される。Ziproxyをモバイルデバイス向けのWebプロキシにする場合は「OnlyFrom=127.0.0.1」とし、SSHポート転送を利用してこのWebプロキシへの接続を行えばよい。

あなたのシステムをさらに高度なものするアイデアが詰まった「Leverage OSS」コーナーにどうぞ


       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ