FastCGI は、言語に依存しないスケーラブルなアーキテクチャの CGI オープン拡張機能であり、その主な動作は CGI インタープリター プロセスをメモリ内に保持することで、より高いパフォーマンスを実現します。ご存知のとおり、CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリタがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティ、フェイルオーバー機能などが提供されます。
FastCGI の動作原理は次のとおりです:
(1) FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタプリタ プロセス (複数の php-cgi プロセス) を開始し、Web サーバーからの接続を待ちます。この記事では、PHP-FPM プロセス マネージャーを使用して、複数の php-cgi FastCGI プロセスを開始します。 php-cgi FastCGI プロセスを開始するとき、TCP と UNIX ソケットの 2 つの方法で開始するように構成できます。
(2) クライアントリクエストが Web サーバー (Nginx) に到達すると、Web サーバーは TCP プロトコルまたは UNIX ソケットメソッドを使用してリクエストを FastCGI メインプロセスに転送し、FastCGI メインプロセスは CGI インタプリタ (子プロセス) を選択して接続します。 。 Web サーバーは、CGI 環境変数と標準入力を FastCGI 子プロセス php-cgi に送信します。
(3)
FastCGIサブプロセスは処理完了後、同じコネクションからWebサーバー(Nginx)に標準出力とエラー情報を返します
FastCGIサブプロセスがコネクションを閉じるとリクエストに通知されます。処理が完了したことを意味します。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャーからの次の接続を待機して処理します。通常の CGI モードでは、php-cgi はここで終了します。
つまり、通常の CGI モードがどれほど遅いか想像できるでしょう。すべての Web リクエスト PHP は、php.ini を再解析し、すべての拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。
PHP FastCGI の利点:
(1) PHP スクリプトの実行が高速になります。 PHP インタープリターは、必要になるたびにメモリーから読み取られるのではなく、メモリーにロードされるため、スクリプトに依存するサイトのパフォーマンスが大幅に向上します。
(2) 必要なシステムリソースが少なくなります。サーバーは必要になるたびに PHP インタープリターをロードする必要がないため、CPU の負荷を増やすことなくサイトを大幅に高速化できます。
(3) 既存のコードを変更する必要はありません。 Apache+PHP 上で動作するプログラムは、変更することなく PHP の FastCGI に適合させることができます。