web-dev-qa-db-ja.com

PHPハンドラー(CGI vs FastCGI vs Mod_PHP vs suPHP)の違いは何ですか?

4つの異なるPHPハンドラー(AFAIK)があることを理解しています。

  • CGI(php-cgi)
  • FastCGI(php-fpm)
  • Mod_PHP
  • suPHP

これらのハンドラーの長所と短所、およびそれぞれがどの環境に適しているかを知る必要がありますか?

たとえば、共有ホスティングサーバーを実行している場合、上記のハンドラーのどれが私に適していますか?または、プライベートサーバーを管理している場合はどうなりますか?

5
Hamed Momeni

これらは実際には「6 PHPタイプ」ではなく、2つのPHPタイプであり、それぞれが3つの異なるApache実装で実行されます。

suphp、suphp_workerおよびsuphp_event

suPHP それ自体はPHPのラッパーであり、指定されたユーザー権限(たとえば、Apacheが実行される権限とは異なる)でPHPを実行し、さらに、Apacheモジュール(mod_suphp)を実行します。 suPHPを実行するには-基本的にCGIモードで。CGIモードの簡略化とは、PHPに渡された各リクエストが新しいPHP(ランタイム)プロセスを開始することを意味します。これはCPU使用率の点で高価であり、永続的なPHPランタイム(約3〜5倍だと思います)と比較して低速です。

この最初のバリアントは ApacheのプリフォークMPM を使用していると思います。これは広く使用され、テストされていますが、他のMPMと比較するとかなり遅いです。 Preforkは、その名前が示すとおりに機能します。特定の量のApacheプロセスをフォークし、着信要求に使用できるように保持します。

次の(suphp_worker)は、代わりに worker MPM を使用します。ワーカーは、事前に生成されたプロセスとスレッドの組み合わせであり、一般にpreforkよりも高速で(静的コンテンツの配信 約2倍 )、使用するメモリが少なくなります。

最後の(suphp_event)はsuPHP + MPM event を使用しているようです。これは、ワーカーとは別のプロセス/スレッドモデルを使用しています。 私が見たベンチマーク から、イベントとワーカーはほぼ同じ速度です-イベントMPM(少なくともプロバイダーが行うApache 2.2を使用)は実験的なものとしてマークされています。

mod_php、mod_php_ruid2およびmod_php_itk

これは別の種類のPHPハンドラーの実装:ApacheはPHPランタイムを事前に開始し、着信要求をそれに渡し、必要に応じて新しいプロセスを生成します。これはsuPHPよりもかなり高速ですが、ユーザー権限の分離がないという欠点があります。すべてのphpプロセスはApache自体と同じ権限で実行されます。

Mod_phpはワーカーまたはイベントのスレッドモデルと互換性がないため、最初のバリアントはおそらくプリフォークMPM(上記)を使用します。

2番目のバリアント(mod_php_ruid2)は、Apacheモジュールを使用しているようです mod_ruid2 これにより、各ApacheVirtualHostを異なるユーザー権限で実行できます-これにはPHPプロセスが含まれます。それは長い 非互換性のリスト あなたが考慮すべきです。

最後のバリアント(mod_php_itk)は、サードパーティを使用します ITK MPM Apacheの場合、ApacheプリフォークMPMのフォークで、指定されたユーザー権限で各VirtualHostを実行するオプションがあります。また、VirtualHostごとに追加の制限(クライアントの数など)を適用する機能も提供します。

提案

それらがあなたの唯一の選択であり、あなたがあなたのマシン上で「一人」である場合(別名:あなたは共有ホスティングを計画していません)、私はおそらく古き良きmod_phpに固執するでしょう。

複数のWebサイトを計画している場合は、優先順位を確認する必要があります。

  • パフォーマンスよりもセキュリティ:suphp_workerを使用してください。両方(ワーカーMPMとsuPHP)は広くテストされており、セキュリティの良い出発点になります。静的ファイルのパフォーマンスは良好である必要があります、PHPそれほど多くはありません。
  • セキュリティよりもパフォーマンス:おそらくmod_php_ruid2ですが、ITKの経験が悪いからです

FastCGIを使用する3番目のオプションを使用することをお勧めします。これにより、権利を分離して特権にアクセスする可能性がさらに高まりますが、これは提供されていないようです。

5
ukautz