« フォト蔵 | メイン | スパゲティー作りすぎ »

2005年03月16日

namazu.cgi と通信する

以前、namazu を CGI から叩く方法を書きました。LWP を使った方が安全だよ。という親切なコメントに対しては、検証せずにスルーしてました。

ごめんなさい。 LWP は使わないけど、HTTPプロトコルを使って namazu.cgi を叩くことにします。

これには、以下のような理由があります。

・安全性の面から
・負荷分散の面から

安全性の面からいうと、 Perl CGI 上からコマンドラインを叩く場合は、コマンドライン演算子(バッククォート演算子)を用いて標準出力を得る必要があるのですが、任意のコマンドを叩けるようになる可能性があります。 namazu に対して、任意の検索キーワードを叩けるようにしようとすると、エスケープが面倒でした。というか、調べるのも面倒だったので、途中で止めました。

負荷分散の面からいうと、コマンドラインで叩いた場合は、基本的に localhost しか叩けません。すなわち、自分自身のマシンのプログラムしか呼び出せないわけです。

この2点に関して、 namazu.cgi と通信する仕様にすれば解決できます。

安全性の面からは、 namazu.cgi に脆弱性が無い限り、任意のコマンドが叩かれるという問題は生じないでしょう。ユーザーに文字列を入力させる CGI に脆弱性があれば別だけで、まぁ。回避できるでしょう。というか、回避できないと 掲示板 CGI を作っただけで、えらいことになります。

ポイントはこっち。負荷分散から考えると、通信元の CGI がリバースプロキシのような役目を果たすことができます。グローバル IP が無くっても、ローカルネットワークの別サーバと通信することができるので namazu.cgi を分散できます。

namazu.cgi を分散すると何がうれしいかは、また別問題ですが、大きなインデックスがあってもメモリ上で動かすことができます。そんなに大きいインデックスファイルなら、 namazu.cgi の作動に問題が出ますよ。ってな感じでもありますが。

ユーザー => search.cgi =(LWP等)=> namazu.cgi

search.cgi と namazu.cgi は、同じサーバにある必要が無い。てのが大きいわけで。

namazu.cgi を動かす方の HTTPD は、重い(?) Apache を使わずに、軽量な HTTPD を使えばよいと思う。検索サーバ(データベースサーバ / namazu.cgi しか動かさない)という役目しかないのならなおさら。

それでも、少々問題があって、 namazu.cgi にて検索に時間がかかると、通信がタイムアウトしてしまいます。しかし、namazu.cgi では、最後まで結果を出力しようとするので、無駄が出てしまいます。 namazu.cgi 側で、検索結果をキャッシュできればいいんだけどなぁ。

search.cgi 側で、見かけ上はタイムアウトしているけど、内部的に最後まで通信を行ってキャッシュするのが良いか。

関係ないけど、FeedBack の naoya さん って 取締役最高技術責任者 になられてたんですね。最高技術責任者になったのは知っていたんだけど。すごいなー。スピード出世じゃない?

【関連記事】
Namazu を CGI から呼び出す (2004年11月12日)

【関連情報】
・[もぶろげっと]RSS2.0に対応 (今日の井原)
 http://blog.windy.ac/archives/000681.html

2005年03月16日 23:23 | Technology

トラックバック

コメント