web-dev-qa-db-ja.com

Fastcgi、CGI、Mod_php、PHP、PHP-FPMの違いと欠点

いくつかの異なるphp "ラッパー"(?)があります。それらの違いは何ですか?いくつかグーグルしようとしましたが、情報を見つけることができないようです。 (mod-phpはグーグル可能ではありません)。

なぜ私は他のものを選ぶのですか?

82
Gacek

質問は少し奇妙ですが、PHPだけに質問するのか、それとも質問がより一般的であるのかは明確ではありません。

PHP側から簡単に概要を説明します。

まず、2つのプロトコル:

  • CGIスクリプトは、HTTP要求が来たときにサーバー側スクリプトを実行する方法です。これはPHPとは関係ありません

  • FastCGIは「より優れたCGI」です-CGIは遅いことが知られています。FastCGIは別のアプローチであり、結果ははるかに高速です。これもPHPとは関係ありません。

PHP関連するもの:

  • mod_php は、ApacheモジュールとしてPHP=を実行しています。つまり、PHPリクエストは、Apacheプロセスの下で実行され、それに伴うすべてが実行されます- Apacheプロセスは、Apache構成によって定義されます。PHPはApache権限で実行されます。

  • PHP-FPM はPHPのFastCGI実装です。 PHP-FPMはスタンドアロンFastCGIサーバーとして実行され、ApacheはApacheのモジュール(通常はmod_fcgidまたはmod_fastcgi)を使用してサーバーに接続します。個人的には、これはmod_phpとして実行するよりもはるかに優れていると思いますが、要件によって異なり、もう少し複雑です。この構成では、権限、プロセス関連のものなどすべてがPHP構成、PHPユーザーなど)の下で実行され、ApacheがPHPサーバーに関して;この構成では、PHPサーバーのプールを持ち、Apacheと物理的に異なるマシンにPHPサーバーを持つこともできます。 。これは、Apacheのモジュールを使用するのとほぼ同じ速さで、PHP構成をよりよく制御できるという利点があると言います。

  • SuPHP-これは主に、権限に関連するmod_phpのいくつかの問題に対処するために使用されました。 mod_php PHPスクリプトは、Apacheユーザー/グループの下で実行されます。mod_suphpは、別のユーザーでスクリプトを実行できます。これを使用したことはありません。PHP-FPMの方がはるかに優れているはずです。

だから基本的に:

  • CGI、Fast-CGIはプロトコルです。 CGIが遅い、Fast-CGIがはるかに速い
  • mod_php(アンダースコア付き)とPHP-FPMは、PHPを実行する2つの基本的な方法です
  • mod_SuPHPはmod_phpに似ていますが、プロセスが実行されるユーザー/グループを変更できます
154
Aleš Krajník