dポイントプレゼントキャンペーン実施中!

CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイトなどを目にしますが、どのようにして実現しているのでしょうか。例えば、flockなどの排他処理によって、一定時間内は1ユーザーからのアクセスしか受け付けないといった処理は可能かと思いますが、3ユーザーまでのアクセスのみ受け付けるといった方法はあるのでしょうか。

また、サーバダウンなどにより、CGIが動作しない場合に、エラーメッセージを表示したり、予備のCGIに飛ばす方法はありますでしょうか。
例えば、Aサーバのmain.cgiを動作させたい場合に、まずBサーバのpre.cgiにとばし、Bサーバのpre.cgiからAサーバのmain.cgiへのアクセスを試み、Aサーバがダウンしている為にアクセスに失敗した場合に、Bサーバ内のerroor.htmやsub.cgiに飛ばすことなどはできるのでしょうか。

できれば、CGI(perl)で実現したいのですが、有効な方法がございましたら、恐れ入りますが、教えていただけないでしょうか。もしも可能でしたら、簡単なサンプルのスクリプト等を添えていただけると大変助かります。何卒よろしくお願いいたします。

A 回答 (2件)

>、FastCGIやmod_perlというのはどのようなものでしょうか。



Googleあたりで調べれば、かなりヒットするので、まずは調べてみて下さい。。。
↓本家
http://www.fastcgi.com/
http://perl.apache.org/

WWWサーバに組み込む形になるので、独自サーバじゃないと使えませんけど。
レンタルサーバの中には、使えるところもあるらしいですよ。

>大変申し訳ございませんが、参考URLやサンプルなどご存知ないでしょうか

ないと思います。(^^;
というか、Aサーバ上に常駐(Unixならcronか)させたプログラムに、定期的にBサーバに通知させようと考えたわけですが、サンプルのようなものはどこかにあるのかもしれませんけど、見つけるのは大変でしょう。

いずれにしても、BサーバのCGIでAサーバの状態を取得し、その後AサーバのCGIを呼び出すのだとすると、今度はBサーバの負荷が高くなります。
負荷を軽減したり、サーバダウンした場合の対処方法として色々講じようとするのも良いのですが、あまり色々考えすぎると、返って別の部分で負荷が高くなったり、広げすぎて収拾がつかなくなったりするものです。
個々のCGIの処理を軽くするようにするなど、CGI側の工夫で回避できる部分は多いので、そちらがまず先かと思います。(余分な処理をさせない、より速いアルゴリズムを選ぶ、2度の処理に分けられるなら2つのCGIに分け2ステップで処理するetc)
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変残念なのですが、FastCGIやmod_perlにつきましては、私が利用させて頂いてるレンタルサーバでは使用できないかもしれません。将来、レンタルサーバを選ぶときの基準とさせていただこうと思っております。
ところで、より速いアルゴリズムを選ぶ、2ステップで処理するといったテクニックについて、記述しているURLなどはご存知でしょうか。もしもご存知でしたら教えていただけないでしょうか。
例えば、フォームから送信があった場合に専用ファイルでロックした後4つのファイルにデータを順番に書き込む、sendmailを利用するといったCGIを作っているのですが、かなり負荷がかかるものでしょうか。現在、ウィンドウズ環境で作成・試験し、その後レンタルサーバで動かしているのですが、負荷をどのように測ればよいか分かりません。もしも簡単に測る方法などございましたら、教えていただけると助かります。何卒よろしくお願いいたします。

お礼日時:2002/07/23 18:05

>CGIへのアクセスが集中した場合に、メッセージを表示し、アクセスを制限するサイト



これは、恐らくWWWサーバ(Apahce等)の設定で、プロセス数等を制限しているのだと思います。
↓ちょっとうまいのが見つからなかったのですが、参考までに。
http://www.apache.jp/jdocs/tune/

独自サーバを立てているか、レンタルサーバで設定可能な場合にしか使えないと思いますが。
それから、負荷が高くて困っているのならば、CGIのプロセス起動時のオーバーヘッドを解消するために、(Apacheなら)FastCGIやmod_perlを使用するのも手だと思います。

>例えば、Aサーバのmain.cgiを動作させたい場合に、まずBサーバのpre.cgiにとばし

やりようはあると思いますが、ちょっと思いつきません。
ただこれだと、CGIが実行されるたびにトラフィックが発生しますし、Bサーバがダウンしたときはどうするんだ、という問題もありますので、あまり得策ではないような気がしますが。
やるのであれば、Aサーバ側から定期的にサーバが生きてることをBサーバ側に知らせ、Bサーバ側ではそれを受け取って、ローカルのファイルなりなんなりに状態を記録、BサーバのCGIではそれを参照し、Aサーバの生き死に(一定時間更新されていなければ死んでるとか)を判断するようにするとか。。。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございました。URLまでいただき、大変感謝しております。また、一度にいろいろと質問してしまい、お手間をとらせてしましたことをお詫び申し上げます。

>WWWサーバ(Apahce等)の設定で、プロセス数等を制限しているのだと思いま
す。
やはり、サーバで設定しているのですね。 残念ながら、当方、レンタルサーバのため、設定ができません。ちなみに、FastCGIやmod_perlというのはどのようなものでしょうか。勉強不足で申し訳ありませんが、教えていただけるとありがたいです。

>Aサーバ側から定期的にサーバが生きてることをBサーバ側に知らせ・・
大変申し訳ございませんが、参考URLやサンプルなどご存知ないでしょうか。もしも可能でしたら、当方初心者の為、教えていただけると大変助かります。

お手数をおかけしますが、よろしくお願いいたします。

お礼日時:2002/07/23 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!