FastCGI は具体的に何を行いますか (Ruby、Java、Python の場合)?

FastCGI は具体的に何を行いますか (Ruby、Java、Python の場合)?

Apache を実行しているサーバーがあり、FastCGI をインストールすると、Ruby および Python スクリプトを実行できるようになりますか? サーバーに Python がすでにインストールされている場合は、httpd.conf ファイルの CGI セクションに .py を追加するだけで Python スクリプトを実行できるのではないでしょうか?

Ruby と Java の場合、Ruby と Java がインストールされていれば、Mongrel と Tomcat は必要なくなりますか?

何か見落としていない限り、FastCGI でできることは、すでにできることだけであるように思われます。

答え1

FastCGI は、「標準」 CGI スクリプトの代替です。

旧式の CGI では、Web サーバーがスクリプトを起動し、リクエストを送信し、応答を待機し、スクリプトが終了するのを待ちます。

FastCGI の主な特徴は、スクリプトが終了せずに、別のリクエストを待機することです。これにより、別のプロセスが作成されず、おそらく解釈されたスクリプトが再ロードされないなど、はるかに効率的になります。これは、Perl、Ruby、およびほぼすべての他の言語にとって大きな利点です。

欠点は、このようなことを処理できるようにスクリプトを記述する必要があることです。難しいことではありません。

したがって、FastCGI は、リクエストの処理の影響を軽減することを目的としています。

Ruby on Rails (Ruby だけではない) を使用している場合は、Phusion Passenger を検討してください。これは、Ruby on Rails の実行を非常に快適にする素晴らしいサーバー プラグインです。

mod_python の場合、確かにそれが可能です。ただし、トレードオフがあります。まず、CGI スクリプトはメインの Web サーバーとは別のユーザーとして実行できます。mod_python がこれを実行するかどうかはわかりません。権限の問題や、異なるユーザーで実行することでアプリケーションを分離しておくなどの理由で、別のユーザーとして実行できることは非常に便利です。

したがって、質問に少し違った形で答えると、mod_python と Phusion Passenger を使用する場合は、FastCGI を使用する必要はありません。スクリプトをサーバーとは別のプロセスで実行する必要がある場合は、可能であれば、従来の CGI ではなく FastCGI を使用する必要があります。

答え2

FastCGI は CGI の最適化バージョンです。CGI のインターフェースと一致し、分散コンピューティングが追加されています。

Python スクリプトは CGI 経由で実行できます (cgitb モジュールが便利です) が、通常はパフォーマンスと機能上の理由から、mod_python などのフレームワークを使用する方がよいでしょう。Ruby と Java でも状況は同様です。

何をしようとしているのかわかりません。Mongrel や Tomcat を FastCGI に置き換えるだけではだめです。これらはまったく異なるものです。Web サーバーへのインターフェイスに適合するようにアプリケーションを書き直す必要があります。

関連情報