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へのアクセスのセキュリティ保護が可能になる。
