著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Apache HTTP Webサーバーは、さまざまな環境で動作し、さまざまなニーズを解決するために、何年にもわたって進化してきました。 他のWebサーバーと同様に、Apache HTTPが解決しなければならない重要な問題の1つは、httpプロトコル要求を処理するためにさまざまなプロセスを処理する方法です。 これには、ソケットを開き、要求を処理し、接続を一定期間開いたままにし、その接続を介して発生する新しいイベントを処理し、特定の言語(PHP、Perl、Pythonなど)で作成されたプログラムによって生成されたコンテンツを返すことが含まれます。 。 これらのタスクは、マルチプロセッシングモジュール(MPM)によって実行および制御されます。

Apache HTTPには、次の3つの異なるMPMが付属しています。

  • Pre-fork :サーバーに到達する着信接続ごとに新しいプロセスが作成されます。 各プロセスは他のプロセスから分離されているため、実行のある時点で同じ呼び出しを実行している場合でも、プロセス間でメモリは共有されません。 これは、スレッド化をサポートしていないライブラリ(通常は古いアプリケーションまたはライブラリ)にリンクされたアプリケーションを実行するための安全な方法です。
  • Worker :親プロセスは子プロセスのプールを起動する責任があり、その一部は新しい着信接続をリッスンし、その他は要求されたコンテンツを提供します。 各プロセスはスレッド化されているため(1つのスレッドで1つの接続を処理できます)、1つのプロセスで複数の要求を同時に処理できます。 接続を処理するこの方法は、安定性を維持しながら、より良いリソース使用率を促進します。 これは、利用可能なプロセスのプールの結果であり、多くの場合、新しい接続をすぐに提供する準備ができている無料の利用可能なスレッドがあります。
  • Event :ワーカーに基づいて、このMPMは、親プロセスが子プロセスとそれらに関連付けられたスレッドにタスクをスケジュールする方法を最適化することにより、さらに一歩進んでいます。 接続はデフォルトで5秒間開いたままになり、新しいイベントが発生しない場合は閉じます。 これはkeep-aliveディレクティブのデフォルト値であり、関連付けられたスレッドを保持します。 イベントMPMを使用すると、プロセスでスレッドを管理できるため、一部のスレッドは新しい着信接続を自由に処理でき、他のスレッドはライブ接続にバインドされたままになります。 割り当てられたタスクをスレッドに再配布できるようにすると、リソースの使用率とパフォーマンスが向上します。

MPMイベントモジュールは、ApacheHTTPWebサーバーで使用できる高速マルチプロセッシングモジュールです。

PHP-FPM は、PHP用のFastCGIプロセスマネージャーです。 FastCGIプロトコルは、アプリケーションとApacheHTTPなどのWebサーバーの間にあるプロトコルであるCommonGateway Interface(CGI)に基づいています。 これにより、開発者はWebサーバーの動作とは別にアプリケーションを作成できます。 プログラムはプロセスを独立して実行し、このプロトコルを介して製品をWebサーバーに渡します。 アプリケーションによる処理が必要な新しい接続ごとに、新しいプロセスが作成されます。

ApacheHTTPのMPMイベントをPHPFastCGIProcess Manager(PHP-FPM)と組み合わせることにより、Webサイトはより高速にロードし、より少ないリソースを使用しながらより多くの同時接続を処理できます。

このチュートリアルでは、デフォルトのマルチプロセッシングモジュールをプリフォークからイベントに変更し、PHP-FPMプロセスマネージャーを使用して従来の[ ApacheHTTPのX231X]