オンライン説明を参照し、オンライン説明の内容を整理してください:
まず、CGI とは何ですか? CGI は、Web サーバーによって渡されるデータが標準形式であることを保証するもので、これは CGI プログラムの作成者にとって便利です。
Web サーバー (nginx など) は単なるコンテンツのディストリビューターです。たとえば、/index.html がリクエストされた場合、Web サーバーはファイル システム内でこのファイルを見つけてブラウザに送信します。ここで配布されるのは静的データです。構成ファイルによると、リクエストが /index.php に対するものである場合、nginx はこれが静的ファイルではなく、PHP パーサーによって処理される必要があることを認識しているため、単純にリクエストを処理して次のファイルに渡します。 PHP パーサー。 Nginx はどのようなデータを PHP パーサーに渡しますか? URL、クエリ文字列、POST データ、HTTP ヘッダーが存在する必要があります。CGI は、どのようなデータをどのような形式で送信するかを規定するプロトコルです。リクエストを処理するバックエンド。 PHP コードで使用するユーザーがどこから来たのかを慎重に考えてください。
Web サーバーが /index.php のリクエストを受信すると、対応する CGI プログラム (PHP パーサー) が開始されます。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、CGI で指定された形式で処理結果を返し、プロセスを終了します。その後、Web サーバーは結果をブラウザーに返します。
さて、CGI はプロトコルであり、プロセスなどとは何の関係もありません。では、fastcgi とは何でしょうか? Fastcgi は、CGI プログラムのパフォーマンスを向上させるために使用されます。
パフォーマンスを向上させる CGI プログラムのパフォーマンス上の問題は何ですか? 「PHP パーサーは php.ini ファイルを解析し、実行環境を初期化します。」それだけです。標準 CGI はリクエストごとにこれらの手順を実行するため (疲れる必要はありません。プロセスを開始するのは非常に面倒です!)、毎回の処理時間は比較的長くなります。これは明らかに不合理です!では、Fastcgi はどのようにしてそれを行うのでしょうか?まず、Fastcgi はマスターを起動し、構成ファイルを解析し、実行環境を初期化してから、複数のワーカーを起動します。リクエストが届くと、マスターはそれをワーカーに渡し、すぐに次のリクエストを受け入れることができます。これにより、作業の重複が回避され、当然のことながら非常に効率的になります。また、十分なワーカーがない場合、マスターは構成に従っていくつかのワーカーを事前に開始し、待機することができます。もちろん、アイドル状態のワーカーが多すぎる場合は一部が停止されるため、パフォーマンスが向上し、リソースが節約されます。これがfastcgiのプロセス管理です。
それで、PHP-FPM とは何ですか? Fastcgi を実装したプログラムであり、PHP に正式に受け入れられました。
ご存知のとおり、PHP のインタプリタは php-cgi です。 php-cgi は単なる CGI プログラムであり、リクエストを解析して結果を返すことしかできませんが、プロセスを管理する方法は知りません (陛下、私にはそんなことはできません!)。そのため、php-cgi をスケジュールできるプログラムがいくつかあります。たとえば、spawn-fcgi は lighthttpd から分離されます。まあ、PHP-FPM も同じようなものですが、長い開発期間を経て、徐々に誰もが認めるようになりました (ご存知のとおり、ここ数年、PHP-FPM の安定性の悪さについて誰もが不満を抱いていました)。ますます人気があります。
fastcgi は前述の通りプロトコルなので、php-fpm が存在してもそれを管理することはできないようです。 php-fpm は PHP カーネルのパッチだと言う人もいます
以前は正しかったです。 php-fpm は最初から PHP カーネルに含まれていないため、この機能を使用するにはソースコードのバージョンと同じ php-fpm を見つけてカーネルにパッチを当て、コンパイルする必要があります。その後、PHP カーネルに PHP-FPM が統合されてからは、 --enalbe-fpm コンパイル パラメーターを使用するだけでさらに便利になりました。
php.ini 設定ファイルを変更した後、スムーズに再起動する方法がないと言う人もいます。そのため、php-fpm が誕生しました。
はい、php.ini を変更した後、php-cgi プロセスをスムーズに再起動できません。これに対する php-fpm の処理メカニズムは、新しいワーカーが新しい構成を使用し、既存のワーカーが現在の作業を処理した後に休むことができるというもので、このメカニズムは移行をスムーズにするために使用されます。
Fastcgi は CGI のアップグレード バージョンで、プログラム (PHP、Python、Java など) と Web サーバー (Apache2、Nginx) 間の通信に使用される言語に依存しないプロトコルです。理論的には、どの言語で書かれたプログラムでも Fastcgi を介して Web を提供できます。仕える。
Fastcgi の特徴は、効率を向上させるために複数のリクエストを 1 つのプロセスで完了することです。ほとんどの Fastcgi 実装はプロセス プールを維持します。 P PHP-FPM は、PHP 用の FastCGI の実装であり、Web サーバーからのリクエストを処理するプロセス プールを管理します。現在、PHP-fpm は PHP に組み込まれています。
ただし、PHP-fpm は単なる「PHP Fastcgi プロセス マネージャー」であり、PHP インタープリター自体を呼び出してリクエストを処理します。PHP インタープリター (Windows では) は php-cgi.exe です。