このチュートリアルを使用して、新しい Web サーバーに nginx、php、および mysql をインストールしています。
チュートリアルでは ISPConfig 3 を使用しており、FastCgi と PHP-FPM のどちらを使用するかを選択できます。
どっちがいいのか悩んでいます。パフォーマンスと速度の点で、nginx とインラインで使用するのに最適なのはどちらですか?
ところで、サーバーで memcached と xcache も有効にしました。
PHP-FPM は、PHP の古い FastCGI 処理よりもはるかに優れています。PHP 5.3.3 の時点で、PHP-FPM がコアに含まれており、古い FastCGI 実装は利用できなくなりました。
私の答えは (かなり長い間オンラインになった後) 反対票を投じられただけで、その理由は理解できます。PHP-FPM が実際に古い FastCGI 実装よりも優れている理由のリストを以下に示します。
まず第一に、PHP コミュニティでは FastCGI の実装が悪いことはかなり前から知られていました。https://wiki.php.net/ideas/fastcgiworkにあるドキュメントのページ:
php-cgi は、追加の「松葉杖」 (lighttpd ディストリビューションの spawn-fcgi や php-fpm パッチなど) がなければ、運用環境では役に立ちません。このプロジェクトは、そのような「松葉杖」の統合と、さまざまなプロトコルをサポートするための php-cgi の拡張を前提としています。
- デーモン化 (デタッチ、pid ファイルの作成、環境変数のセットアップ、setuid/setgid/chroot)
- グレースフル リスタート
- トランスポート層を分離および改善して、さまざまなプロトコルのサポートを可能にする
- SCGI プロトコルのサポート
- HTTP プロトコルのサブセットのサポート
- …</li>
以下は、http : //php-fpm.org/about/から取得した、PHP-FPM が優れている点のリストです。
- PHP デーモン化: pid ファイル、ログファイル
setsid()
、、、、setuid()
setgid()
chroot()
- プロセス管理。クエリを失うことなく、PHP ワーカーを「適切に」停止および開始する機能。これにより、クエリを失うことなく、構成とバイナリを徐々に更新できます。
- リクエストの送信元となる IP アドレスを制限します。
- 負荷に応じた動的なプロセス数 (適応プロセス生成)。
- 異なる uid/gid/chroot/environment と異なる
php.ini
オプションでワーカーを起動します (セーフ モードは必要ありません)。- ロギング
STDOUT
とSTDERR
.- アクセラレータを使用している場合、共有メモリ オペコード キャッシュが誤って破壊された場合に、すべてのプロセスを緊急再起動する機能。
- 失敗した場合、プロセスを強制的に完了させ
set_time_limit()
ます。追加機能: - エラー ヘッダー - 高速アップロードのサポート -
fastcgi_finish_request()
- バックトレース付きのスローログ
1 つの小さな修正: PHP FastCGI SAPI は、PHP 5.5.x でも引き続き使用できます。
[root@zulu1 ~]# /usr/local/php54/bin/php-cgi -v
PHP 5.4.17 (cgi-fcgi) (built: Jul 18 2013 05:12:07)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies