区別の概念と原則を理解し、CGI、FastCGIのとのPHP-FPMの下で実行するのは簡単

CGIとは何ですか?

インターフェース標準のWebサーバと外部アプリケーション(CGIプログラム)との間の情報の転送であるCGI(コモンゲートウェイインターフェース)、コモンゲートウェイインタフェース。CGIインタフェースを介して、Webサーバーは、クライアントによって提出された情報にアクセスすることができ、およびサーバーのCGIプログラムに転送され、最終的にクライアントに結果を返します。

言い換えれば、CGIは、実際のインターフェース規格です。私たちは通常、CGIを参照してくださいCGIインターフェースの標準的な手順を実装してCGIプログラムを指します。

限りなどのPerl、PHP、C、のような標準的な言語を有する入力、出力および環境変数として、CGIプログラムを書くために使用することができます。

CGIプログラムは動作します:

Webサーバーは、一般的に、あなたが(PHPなど)の動的スクリプト要求が発生した場合、ウェブサーバーのマスター・プロセスは、あなたがCGIプログラムを起動するための新しいプロセスをフォーク、その意志(例えばJPG、HTM、HTMLなど)の静的ファイル要求にのみ対処します動的なスクリプトが処理するCGIプログラムに要求します。CGIプログラムは、プロセスを開始する必要があり、例えば、設定ファイル、負荷の拡張を読み込みます。CGIプログラムが起動したら、それは動的なスクリプトを解決します、その後、Webサーバー、Webサーバーに結果を返した後、最終的には、クライアントに結果を返すだけのフォークプロセスは、シャットダウンします。

このように、ユーザは、動的スクリプトを要求するたびに、Webサーバーは、CGIプログラムを起動するための新しいプロセス動的スクリプトを処理するためのCGIプログラムの再フォークでなければならない、オフにプロセスを扱っ。

作業のこの方法の効率は非常に低いです。

PHPインタプリタのWebサーバー・プロセスの実行中に埋め込まれている場合

Webサーバー内蔵のモジュール:その後、より効率的な方法がありました。たとえば、Apacheのmod_phpモジュール。PHPインタプリタモジュールが作られ、その後、サーバーのApacheにロードされます。

このように、起動時にApacheサーバは、それは同時にPHPのモジュールから開始されます。クライアントは、ファイルのPHPを要求すると、ApacheサーバがPHPインタプリタを起動するために、新しいプロセスをフォークする必要はありませんが、直接PHPファイルへの処理のためのPHPモジュールで実行します。明らかに、このように、それはより効率的です。

Apacheサーバの起動時に、PHPの設定ファイルを読み込みますので、Apacheを実行するプロセスでは、PHPモジュールをロードします。PHPは、設定ファイルを再読み込みしません。そこで、我々は、PHPの設定ファイルを変更するたびに、あなたを有効にするにはApache、PHP、新しいコンフィギュレーション・ファイルを再起動する必要があります。

Apacheでのみ使用されるApacheプロセスに埋め込まmod_phpをPHPインタープリタ、高速のCGI CGIながら別個のプロセスとして現れる限り、対応するWebサーバーの実装や高速のCGI CGIプロトコルとして、要求がPHPを扱うことができます。最大の欠点を埋め込まれたこの方法は、メモリにロードされますPHPインタプリタを使用するかどうか、典型的なインタプリタをロードする必要はありません取引CSS、JS静的ファイルなことである、大きなメモリフットプリントですmod_phpを。

FastCGIは何ですか?

FastCGIは実行されているCGIプログラムの恒久的(長期生)タイプのようなものです。FastCGIのプログラムが別のホスト上のWebサーバーに展開することもでき、それは他のWebサーバーからの要求を受け入れることができます。

FastCGIは、言語に依存しないです。主な動作は、メモリ内のCGIインタプリタプロセスを維持し、効率的なパフォーマンスを得ることです。我々はすべて知っているように、CGIインタプリタ繰り返し荷重は、パフォーマンスの低下のCGIの主な理由です。

FastCGIは、メモリ内のCGIプロセスを管理することができ、プロセス管理ツールです。

FastCGIプロセスマネージャは、個別に起動する必要があります。FastCGIの開始後、マスター・プロセスとサブFastCGIプロセスの複数の(子プロセスが実際にCGIインタプリタ処理である)を生成します。

クライアントは、サーバーのWeb上で動的なスクリプトを要求すると、メインプロセス、メインFastCGIプロセスになります動的にTCPプロトコルのFastCGIスクリプトを経由してWebサーバの状況に応じて、動的なスクリプト処理を解決するために無料の子プロセスをスケジュール完了すると、結果が返されますWebサーバーに、Webサーバーは、その後、クライアントに結果を返します。クライアント要求は、FastCGIの子プロセスが処理され、オフにしますが、メインコーススケジュールタスクを待ち続けていません後。

FastCGIの重要な機能:

1、FastCGIはHTTPサーバと動的スクリプト言語インタフェースやコミュニケーションツールとの間です。

2、動的言語はHTTPサーバを解析し、分離したFastCGI利点。

3、nginxのは、Apache、Lighttpdのほとんどの動的言語は、FastCGIのをサポートしています。

図4に示すように、C / Sアーキテクチャを使用してFastCGIインタフェースモードは、クライアント(HTTPサーバ)とサーバ(動的言語解決サーバ)に分割されます。

5、PHPは動的言語あなたは、複数のFastCGIのサーバデーモンを起動することができます。

6、FastCGIの動的言語のFastCGIサーバ間の通信を経由してHTTPクライアントとサーバ。

回路図および操作手順:

 

まず、負荷のFastCGIプロセスマネージャ(ApacheモジュールまたはIIS ISAPIなど)場合、Webサーバーの開始

二つ、FastCGIプロセスマネージャは、複数のCGIインタプリタ処理を開始するために、それ自体を初期化する(複数PHP-CGIを構築することができる)、及びWebサーバからの接続を待ちます。

第三に、クライアントの要求を選択し、CGIインタプリタに接続するために、Webサーバー、のFastCGI Process Managerを到着したとき。Webサーバーは、子のFastCGI PHP-CGI CGI環境変数と標準入力に送信します。

第四に、子FastCGIプロセスが完了した後、標準出力とエラーメッセージに同じ接続からWeb Serverを返さ。子FastCGIプロセスが閉じると、接続要求は、プロセスを完了するために来ます。FastCGIプロセスは、その後、子供を待ち、そしてFastCGIプロセスマネージャ(Webサーバに実行されている)の下からの処理を接続です。CGIモードでは、PHP-CGIこれは終了します

PHP-FPMとは何ですか?

FPMのFastCGI Process Managerは略称であり、そして、略してFPMのFastCGIプロセスマネージャです。

PHP-FPMは、PHPのFastCGIプロセスマネージャです。

以前のバージョンPHP5.3それについては、PHP-FPMは、PHPのFastCGI Process Managerのパッケージに統合できるように設計、サードパーティ製のパッチです。

それ以降のバージョンでは、PHP-FPM、中PHP5.3は、もはやサードパーティ製のパッケージで、それはのPHPのソースコードに統合されていません。PHPのPHP-FPMは、より良いプロセス管理を提供し、効果的にメモリを制御することができ、プロセスが円滑にPHP構成をオーバーロードすることができ、スポーン-fcgiのより多くの利点を有しているので、PHP-FPMは、取得した正式なPHPです。

管理対象オブジェクトのPHP-FPMは、PHP-CGIです。しかし、私は、PHP-FPMは、FastCGIのプロセスマネージャで、先に言ったように、FastCGIのプロトコルであり、このようなプロセスが存在していないよう、PHP-FPMがあっても(少なくとも今のところは)彼を管理することはできませんと言うことはできません。いくつか述べ、PHP-FPMは、右のように使われるカーネルパッチのPHPです。この機能を使用するには、内部のPHPコアに含まれていないのphp-FPMの当初から、あなたはコンパイルし、その後、PHP-FPMパッチの同じソースバージョンのカーネルを見つける必要があります。統合されたPHP-FPMと後でPHPのコアは、このコンパイラパラメータ--enalbe-FPMを使用する方が便利です。

おすすめ

転載: www.cnblogs.com/FLy-1992/p/11645762.html