相違点と欠点:Fast-CGI、CGI、Mod-PHP、SuPHP、PHP-FPM


73

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

なぜ別のものを選択するのですか?

回答:


141

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

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

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

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

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

今、PHP関連のもの:

  • mod_phpは、ApacheモジュールとしてPHPを実行しています。つまり、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に似ていますが、プロセスが実行されるユーザー/グループを変更できます

たぶん、私はこの質問のきっかけとなったものを明確にします。ISPConfigパネル(管理ページへのオープンソースパネル)を備えたVPSを入手しました。そこで、サーバー/サイド用のPHPバージョンを選択できます。そして、それらはそこにリストされています。基本的に、PHP-FPMを選択すると、追加の「ラッパー」を含むFastCGIが選択されるようです
ガチェク14年

12
ISPConfigパネルが実際に何を使用しているかはわかりませんが、PHPがPHP-FPMとして実行されることは、PHPが独自の組み込みFastCGIサーバーを起動し、FastCGIプロトコルを介して要求をリッスンすることを意味します。HTTPサーバーはインターネットから要求を受信し、通常どおり処理します。PHPを使用してページを実行する必要がある場合、要求はFastCGIプロトコルを介してPHPに渡され、結果がブラウザーに返されます。これは、ブラウザーとPHP(PHP-FPM FastCGI)サーバーの間にあるHTTPサーバーと考えてください。PHP-FPMは、FastCGIプロトコルの実装です。
アレシュクレイニク14年

@AlešKrajníkはその詳細な説明に感謝します。さて、私はPHPを別のユーザー/グループとして実行しようとしています。だから私はSu-execから始めて行き止まりになり、それから数人があなたが説明したphp-fpmを勧めました。ただし、モジュールmog_cgi、mod_cgid、mod_fastcgi、mod_fcgi、およびこれらがphp-fpmでどのように機能するかについては、まだ混乱しています。また、mod_fcgidとmod_proxy_fcgiを使用していた別のチュートリアルを読みました。すべてのピースがどのように組み合わされるかを理解するのに苦労しています。
デビッドオクウィー

1
@landed PHP-FPMバイナリは、特定のPHPバージョンについて、5.3.3または5.4.0以降のすべてのPHPディストリビューションの一部です(これを確認するにはphp-fpm.org)。
アレシュクレイニク

2
php-fpmは、初期化コストの削除に関するものです。php-fpmはいくつかのphpプロセスを事前に開始し、リクエストを処理する準備ができており、リクエストが届くまでスリープ状態にします。つまり、従来のCGIとは対照的に、リクエストが来たときにphpが既に実行されているため、リクエストごとに新しいphpプロセスが開始され、php-fpmはリクエストの処理後にphpプロセスをシャットダウンしませんが、同じプロセスを再利用し続けます。-プロセスの開始と停止のオーバーヘッドが0であるため、php-fpmの応答ははるかに高速です。プロセスの開始と停止には時間がかかります。
ハンシェンリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.