リバースプロキシを通さずに、Zope(ZServer)で直接 HTTP をサービスすると、よく落ちたり止まったりするらしい・・・どうも、Nimda等のワームから不正な Request をたくさん受けると調子悪いらしい・・・という話をよく耳にします。
基本的には、Zope(Python) が遅いのがいけないとは思うのですが、ZServerで HTTP Request を受け取ってから ZODB のトランザクションを開始するまでの間に、不正なパスをチェックできれば、負荷もだいぶ軽減できるのでは?と思い、本当にそんなこと(トランザクション開始前のチェック)ができるのかどうか、試してみた結果がこれです。
なお、当方 Zope2.6.1 で試しましたが、他のバージョンでも動作すると思います。
4.のパッチは、(Windows環境等で)patchコマンドがない場合は、中身を見てもらえば、手で修正することができます。
5.の書き方については、既存のソースを参考にしてください。
Control_Panel->Products->RequestChecker の Refresh タブで、リフレッシュができますので、Zopeを動かしながら拒否するパターンを変更することができます。
| 0.3 | 2003/3/16 | Status 400 をクライアントに返す。 |
| 0.2 | 2003/3/12 | IPアドレスをログに残す。 refresh.txtを同梱。 |
| 0.1 | 2003/2/24 | 初期リリース |
ちょっと書き換えれば、Apacheの mod_rewrite みたいなことができるかも・・・などと考えています。
それから、mod_antihak というのがあるらしいが、 http://apantihak.sourceforge.net/ こんなのもがんばればできそう。(説明は http://slashdot.jp/journal.pl?op=display&uid=2524&id=108668 がわかりやすいです。)