web-dev-qa-db-ja.com

PHPをApacheモジュールまたはFastCGIとして実行することの長所と短所は何ですか?

私のVPSでは、PHPをApacheモジュールとして実行するかFastCGIとして実行するかを選択できます。

この決定はどのように行うべきですか?パフォーマンス?セキュリティ?使いやすさ?適合?

PLESKを使用しています。

7
nute

PHPApache HTTPDモジュールとしてリンクすると、それらが分離できなくなります。

これには問題がないわけではありません:

実際、多くのPHPライブラリはありません threadsafeそれが不可欠ですprefork-mpmモジュール forHTTPD 2.xHTTPD 1.3と同様の方法でリクエストを処理する、スレッド化されていない、分岐前のWebサーバーを実装するための運用環境。

ただし、このアプローチはパフォーマンスに大きく影響し、CPUとRAMに過負荷がかかり、タイムアウトなどのトラブルが発生する可能性があります。

マニュアルページ Apache Performance Tuning では、長所と短所についてもう少し詳しく説明しています。

prefork MPMは、それぞれ1つのスレッドを持つ複数の子プロセスを使用します。各プロセスは一度に1つの接続を処理します。多くのシステムでは、preforkはワーカーと同等の速度ですが、より多くのメモリを使用します。 Preforkのスレッドレス設計は、状況によってはワーカーよりも利点があります。非スレッドセーフのサードパーティモジュールで使用でき、スレッドデバッグサポートが不十分なプラットフォームでデバッグしやすくなります。

だから、私見、PHPwithFastCGIは、実稼働により適しています。

さらに、私の好みはmod_fastcgiではなくmod_fcgid外部プロセスマネージャを定義する機能など、より多くの機能を提供します。

とにかく、prefork-mpmモジュールの必要はなくなり、最終的に worker-を渡すことが可能になります。 mpmモジュール 、より効果的。ただし、管理プロセスはシェルスクリプトを介して処理され、php-cgi実行可能ファイルを起動しますが、これはあまり便利ではありません。

幸いなことに、 FastCGIProcess Manager forPHPPHP -FPM 、人気のパッチ ネイティブ統合 以降、PHP 5.3.3。残念ながら、PHP 5.2.xを使用している場合、古典的なFastCGIに限定されます。

それでも、マニュアルページで報告されているように、CGIモードに関連する可能性のある脆弱性を認識することが重要です CGIとコマンドラインのセットアップ

警告
CGIモードで展開されたサーバーは、いくつかの脆弱性にさらされています。 CGIセキュリティセクション を読んで、このような攻撃から身を守る方法を学んでください。

このブログ投稿をご覧ください。実用的な使用例が含まれており、この応答を作成する上で非常に役立ちました。

php、fastcgi、fpmおよびApache(フランス語)
php、fastcgi、およびApache fpm(Google Translateを使用した英語)

4
Pascal Qyy

いいえ。実際はそれよりも少し複雑です。質問を理解している限り、Apacheがリクエストを処理しているとき、すべてのPHPライブラリをロードします(PHPの場合Apacheモジュールとして)。静的リソース要求を実行する場合でも。そのため、大量のメモリを消費します。

もう1つのソリューションは、軽量のフロントhttpserverです。静的リクエストを実行し、PHPリクエストをPHP-CGIに転送します。

これを再開するには:

  • Apache PHP Module:90%で使用されるシンプルで簡単な標準。
  • PHP-CGI:静的なリソース(画像、写真など)が多数ある場合のパフォーマンス。構成、保守が少し複雑です。
1
iammichiel