web-dev-qa-db-ja.com

FastCgiとPHP-NginxWebサーバーを使用したFPM

私はこれを使用しています tutorial 新しいWebサーバーにnginx、php、mysqlをインストールします。

チュートリアルではISPConfig3を使用しており、FastCgiとPHP-FPMのどちらを使用するかを選択できます。

どちらがいいのかしら。パフォーマンスと速度の観点から、nginxとインラインで使用するのに最適なのは2つのうちどちらですか?

ところで、サーバーでmemcachedとxcacheも有効にしています。

13
jaypabs

PHP-FPMは、PHPの古いFastCGI処理よりもはるかに優れています。 PHP 5.3.3 PHP-FPMはコアであり、古いFastCGI実装は使用できなくなりました。

私の答えは(かなり長い間オンラインになってから)反対票を投じられたばかりで、その理由を理解しているので、PHP-FPMが実際に古いFastCGI実装よりも優れている理由を以下に示します。

まず第一に、FastCGIの実装がPHPコミュニティで悪いことはかなり前から知られていました。 https:// wiki。 php.net/ideas/fastcgiwork ここで:

php-cgiは、追加の「松葉杖」がない本番環境では役に立ちません(たとえば、lighttpdディストリビューションのspawn-fcgiまたはphp-fpmパッチ)。このプロジェクトは、そのような「松葉杖」の統合と、さまざまなプロトコルをサポートするためのphp-cgiの拡張を前提としています。

  • デーモン化(デタッチ、pidファイルの作成、環境変数のセットアップ、setuid/setgid/chroot)
  • グレースフルリスタート
  • トランスポート層を分離して改善し、さまざまなプロトコルのサポートを可能にします
  • sCGIプロトコルのサポート
  • hTTPプロトコルのサブセットのサポート

これは、PHP-FPMが優れている点のリストであり、 http://php-fpm.org/about/ から取得したものです。

  • PHPデーモン化:pidファイル、ログファイル、setsid()setuid()setgid()chroot()
  • プロセス管理。クエリを失うことなくPHPワーカーを「適切に」停止および開始する機能。これにより、クエリを失うことなく構成とバイナリを徐々に更新できます。
  • リクエストの送信元となるIPアドレスを制限します。
  • 負荷に応じた動的なプロセス数(適応プロセスの生成)。
  • 異なるuid/gid/chroot/environmentおよび異なる_php.ini_オプションを使用してワーカーを起動します(セーフモードは必要ありません)。
  • ロギングSTDOUTおよびSTDERR
  • アクセラレータを使用している場合、共有メモリのオペコードキャッシュが誤って破壊された場合に、すべてのプロセスを緊急に再起動する機能。
  • set_time_limit()が失敗した場合、プロセスの完了を強制します。

追加機能:-エラーヘッダー-高速アップロードサポート fastcgi_finish_request() -バックトレース付きのSlowlog

19
Fleshgrinder

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

fastcgi側:

  1. Fastcgiは監視が簡単です:fastcgiにはユーザーごとに1つのpidがあります。多くのアカウントを持つWebサーバーでは、過負荷のプロセスを簡単に見つけることができます。一方、php-fpmは、リクエストに応じて多くのプロセスと1つのマスタープロセスを作成します。異なるIPからの接続がたくさんある場合、これは厄介です。
  2. Fastcgiの設定が簡単:FastcgiはApacheの設定に含まれています。だからそれは物事を簡単にします。一方、php-fpmには追加の構成ファイルが必要です。構成の依存関係がある場合、それは物事を複雑にします。
  3. 大手共有ホスティング会社は、2015年にphp 5.6でphp-fpmをまだ使用していません今日、すべての最大の共有ウェブホスティング会社(bluehost、hostgator、namecheap)はfastcgiを使用していますが、php-fpmを使用していません。彼らがphp-handlerとしてphp-fpmを提供しない理由。

php-fpm側:

  1. php-fpmは、mod_phpよりも20%少ないfastcgiよりも20%少ない消費量であることに気づきました。したがって、php-fpmは、RAMの量が最も少ないWebサーバーに適しています。
0