ホームページ >バックエンド開発 >PHPチュートリアル >FastCgi と PHP-fpm の関係について話しましょうか?

FastCgi と PHP-fpm の関係について話しましょうか?

藏色散人
藏色散人転載
2021-09-26 15:25:512875ブラウズ

fastcgi と php-fpm の関係をほぼ 1 週間にわたってオンラインで確認してきました。 , 基本的に何度も読んでいますが、本当にさまざまな意見があり、権威のある定義はありません。

  • インターネット上の一部の人々は、fastcgi はプロトコルであり、php-fpm がこのプロトコルを実装していると言っています;

  • 一部の人々は、php- fpm は Fastcgi プロセス マネージャーであり、fastcgi プロセスの管理に使用されます。

  • #php-fpm は PHP カーネルのパッチであるという人もいます;

  • php.ini 設定ファイルを変更した後、スムーズに再起動する方法がないため、php-fpm が誕生したという人もいますが、

  • PHP-CGI には PHP FastCGI マネージャーが付属しているという人もいます。では、なぜ php-fpm を作成するのでしょうか?

まず第一に、CGI は何のためにあるのでしょうか?

  • #CGI は、Web サーバーによって渡されるデータが標準形式であることを保証するもので、これは CGI プログラムの作成者にとって便利です。

  • Web サーバー (nginx など) は、単なるコンテンツのディストリビューターです。たとえば、/index.html がリクエストされた場合、Web サーバーはファイル システム内でこのファイルを見つけてブラウザに送信しますが、ここで配布されるのは静的データです。構成ファイルによると、リクエストが /index.php に対するものである場合、nginx はこれが静的ファイルではなく、PHP パーサーによって処理される必要があることを認識しているため、単純にリクエストを処理して次のファイルに渡します。 PHP パーサー。 Nginx はどのようなデータを PHP パーサーに渡しますか? URL が存在する必要があります、クエリ文字列が存在する必要があります、POST データが存在する必要があります、そして HTTP ヘッダーが存在する必要があります。CGI は、どのようなデータが送信され、どのような形式で渡されるかを規定するプロトコルです。リクエストを処理するバックエンド。

  • 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 の安定性の悪さについて誰もが不満を言っていました)、ますます人気があります。


さて、最後に上の質問に戻りましょう。

  1. インターネット上の一部の人々は、fastcgi はプロトコルであり、php-fpm はこのプロトコルを実装していると言っています。

そうです。

    #php-fpm は fastcgi プロセスのマネージャーであり、fastcgi プロセスの管理に使用されるという人もいます。
# 右。 php-fpmの管理オブジェクトはphp-cgiです。ただし、前述したように、fastcgi はプロトコルであり、そのようなプロセスは存在しないように見えるため、php-fpm が fastcgi プロセスの管理者であるとは言えません。たとえ php-fpm が存在したとしても、それを管理することはできません (少なくとも、今のところ)。

    php-fpm は PHP カーネルのパッチであると言う人もいます
以前は正しかったです。 php-fpm は最初から PHP カーネルに含まれていないため、この機能を使用するにはソースコードのバージョンと同じ php-fpm を見つけてカーネルにパッチを当て、コンパイルする必要があります。その後、PHP カーネルに PHP-FPM が統合されてからは、 --enalbe-fpm コンパイル パラメーターを使用するだけでさらに便利になりました。

    php.ini 設定ファイルを変更した後、スムーズに再起動する方法がないと言う人もいます。そのため、php-fpm
  1. が誕生しました。

はい、php.ini を変更した後、php-cgi プロセスをスムーズに再起動できません。これに対する php-fpm の処理メカニズムは、新しいワーカーは新しい構成を使用し、既存のワーカーは現在の作業を処理した後に休むことができ、移行をスムーズにするために使用されます。

  1. PHP-CGI は PHP に付属する FastCGI マネージャーであると言う人もいますが、そうであれば、なぜ php-fpm を作成するのでしょうか? ###############間違っている。 php-cgi は、PHP スクリプトを解釈する単なるプログラムです。

推奨学習: 「
PHP ビデオ チュートリアル

以上がFastCgi と PHP-fpm の関係について話しましょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。