Apache + Squid + Zope

以下、記述に誤りがあるかも知れません。御了承ください。なお、御指摘頂けると幸いです。
Plone の遅さがどうしても気になったので、キャッシュを入れることにしました。しかし、Apache 2.0 の mod_cache は experimental であるということと、thread 付き APR という機能が必要ということで、NetBSD 1.6 で動かすのは怖そうなのでやめました。その代わりに調べていたら、Squid が有用であることが分かりました。SquidGuard と組み合わせる説明は Plone.org にもありますが、凝ったことをしなければ Squid 単体でも問題なさそうです。
階層構造としては、

ブラウザ → Squid (逆プロキシ*1) → ApacheZope

というのが一般的なよう*2ですが、試した感じでは、以下でも大丈夫そうです。

ブラウザ → ApacheSquid (逆プロキシ) → Zope

後者のメリットとしては、

  • virtual host のように、任意の URL パスだけを Squid に転送することができる。
  • SSL (HTTPS) でやってきた要求について、SSLApache で解いてから Squid に転送することができる。
  • 使い慣れた Apache のロギングを使い続けることができる。

という点だと(個人的には)考えています。もちろん、SquidGuard を使ったり SquidSSL を組み込む方法もあるようですが、慣れた方法を使うのが一番簡単だし安全だと思いました。
なお、Squid は通常のプロキシと逆プロキシを一つのプロセス(実行インスタンス)で実現可能なので、今使っている Squid を兼用することが可能です。これは、squid.conf を書き換えれば OK です。
前者を選ぶ場合の重要な注意としては、Squid を最外側に置く場合、逆プロキシをポート 80 で受けることになりますが、要求を無条件に外部 web サーバーに転送しないように気を付けます。もちろん、テストもすべきでしょう。
これに対して、後者のように SquidApacheZope の間に挟む場合は、Squid の受け口(listen するポート)を通常のポート(例えば 3128 とか 8080)のままで OK なので、このポートに対するフィルタリングを適切に設定していれば、それほどナーバスになる必要はなさそうです。
以下、私が試したのは

です。
まず最初に雑感ですが、私の小さな実験で見た感じでは、上記の 2つの構成に大きな違いはなさそうです。Apache (http.conf) の

RewriteRule ... [P]

で要求を転送することと、Squid で要求を転送すること(必要に応じてキャッシュをひく)に、大きな違いはないのかも知れません。

Squid (逆プロキシ) → ApacheZope

この場合の Squid の設定は、サンプル squid.conf のコメントを丁寧に読んで、逆プロキシの設定をすることだけです。http_port 80 で要求を受けて、httpd_accel_port 7000*3 等として転送すれば OK です。
ただし重要な注意として(繰り返しになりますが)、ポート 80 で受けたプロキシ要求を任意のサイト外ホストに転送しないよう、acl と http_access の設定に注意が必要と思われます。これには、最初はポート 80 以外を使って実験してから実際の設定をするほうが良いでしょう。もちろん、最後に最終チェックをすることも大切です。このような作業をするとき、サーバーが置かれているサブネットと異なるネットからブラウザでアクセスできると作業が捗ります。
Apache の設定ですが、Squid を使用しないときと同様に Virtual Host Monster で Zope の(例えば)ポート 8080 に転送してやれば OK のようです。

ApacheSquid (逆プロキシ) → Zope

私は当初、前述(Squid が最外側)の設定で運用していたのですが、今まで親しんでいた Apache のロギングが得られなくなってしまうことに不満を覚えました。そのため、ApacheSquid を入れ替える実験をしたのが発端です。
変更した点は、Apache の RewriteRule は Squid を使っていなかったときのように Zope の Virtual Host Monster に投げるように設定を戻し、ただし Squid の http_port*4 に転送するようにします。Squid からは、httpd_accel_port で Zope のポート 8080 に転送してあげれば良いようです。
最後に、Zope の Z2.log と Apache のログ、Squid のログを眺めながら実験を繰り返せば終了です。

後記

今日(12日)、Plone の本(Definitive Guide 日本語版)が届きました。上記に間違いを見つけたら修正する予定です。

*1:Squid では、accelerator mode と呼ばれているようです。

*2:というか、Squid による web サーバーの負荷分散についての説明では、Zope に無関係に Apache を内側に置かないと意味ないですからね。

*3:Apache がポート 7000 で受けている場合。

*4:3128 など。