ホームページ  >  記事  >  バックエンド開発  >  PHPをベースにした各種Webサーバーの動作モードを詳しく解説

PHPをベースにした各種Webサーバーの動作モードを詳しく解説

WBOY
WBOYオリジナル
2016-08-08 09:29:32889ブラウズ

出典:http://www.jb51.net/article/37759.htm

1. Apache での PHP 実行モード

php には、CGI モード、FastCGI モード、Apache モジュール DLL の 3 つの動作モードがあります
以下を比較してください:
1. CGI モードとモジュール モードの比較:
Apache での php の 2 つの作業方法 (CGI モード、Apache モジュール DLL) の違い
これら 2 つの作業方法のインストール:
Apache 2.0 における PHP の CGI アプローチ
ScriptAlias /php/「c:/php/」
AddType application/x-httpd-php .php

PHP 4 の場合はこの行を使用します

Action application/x-httpd-php "/php/php.exe"

PHP 5 の場合はこの行を使用します

Action application/x -httpd-php “/php/php-cgi.exe”
Apache 2.0 の PHP モジュール モード

PHP 4 には次の 2 行を使用します:

LoadModule php4_module “c:/php/php4apache2.dll”

sapi ディレクトリから php4apache2.dll をコピーすることを忘れないでください。

AddType application/x-httpd-php .php

PHP 5 の場合は、次の 2 行を使用します:

LoadModule php5_module “c:/php/php5apache2.dll”
AddType application/x-httpd-php .php

php.iniのパスを設定

PHPIniDir「C:/php」
これら 2 つの作業方法の違い:
CGI モードでは、クライアントが php ファイルを要求すると、Web サーバーは php.exe を呼び出してファイルを解釈し、解釈結果を Web ページの形式でクライアントに返します。 モジュラー (DLL) では、PHP が開始され、Web サーバーと一緒に実行されます。
したがって、ある観点から見ると、Apache モジュール モードでインストールされた PHP4 は、CGI モードよりもセキュリティが高く、実行効率と速度が優れています。
2. FastCGI 動作モード分析:
FastCGI の仕組み:
(1) Web サーバーの起動時に FastCGI プロセス マネージャーをロードします [PHP の FastCGI プロセス マネージャーは PHP-FPM (php-FastCGI プロセス マネージャー)] (IIS ISAPI または Apache モジュール)。 (2) FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタプリタ プロセス (タスク マネージャーには複数の php-cgi.exe が表示されます) を起動し、Web サーバーからの接続を待ちます。
(3) クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタプリタを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi.exe に送信します。
(4) FastCGI サブプロセスは処理が完了すると、標準出力とエラー情報を同じ接続から Web サーバーに返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、FastCGI プロセス マネージャー (WebServer で実行されている) からの次の接続を待機して処理します。 通常の CGI モードでは、php-cgi.exe はここで終了します。
上記のケースでは、CGI が通常どれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての DLL 拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。

    なぜマルチスレッド CGI インタープリターの代わりに FastCGI を使用するのでしょうか?
  1. これは、次のような多くの考慮事項が原因である可能性があります:

    (1) Windows プラットフォームではマルチスレッド CGI インタプリタを安定して使用することはできません。IIS ISAPI メソッドであっても、APACHE Module メソッドであっても、しばらく実行すると必ずクラッシュします。不思議ですか?しかし、そのような状況は実際に存在します!
    もちろん、マルチスレッド CGI インタプリタを安定して使用できる場合も多くありますが、FastCGI に切り替えると、Web ページにエラーが発生し、その原因が見つからない場合があります。このようなエラーの削減は大幅に増加します。これがなぜなのかはわかりませんが、結局のところ、独立したアドレス空間を持つ CGI インタプリタのほうが、共有アドレス空間形式よりももう少し安定しているのではないかと思います。
    (2)、パフォーマンス!パフォーマンス?可能ですか、FastCGI はマルチスレッド CGI インタプリタよりも高速ですか?しかし、それが真実である場合もあり、Web サイトをテストすることによってのみ最終的な結論を下すことができます。理由は言うのが難しいと思いますが、Zend WinEnabler の時代に、Zend は当初 Windows プラットフォームで IIS ISAPI や Apache Module の代わりに FastCGI を使用することを推奨していましたが、現在 Zend はこの製品を製造していません。

  2. PHP を FastCGI モードで実行する利点:
  3. PHP を FastCGI モードで実行すると、いくつかの大きな利点があります。 1 つ目は、PHP に問題が発生した場合、Apache はダウンしませんが、PHP 自体のプロセスがクラッシュします (ただし、FastCGI は、クラッシュしたプロセスを置き換えるために新しい PHP プロセスをすぐに再起動します)。次に、FastCGI モードで PHP を実行した場合のパフォーマンスは、ISAPI モードのパフォーマンスよりも優れています (最初は ApacheBench を使用してテストしましたが、結果を保存するのを忘れました。興味がある場合は、自分でテストできます)。

    最後に、PHP5 と PHP4 を同時に実行できます。以下の構成ファイルを参照して、2 つの仮想ホストが確立されました。1 つは PHP5 を使用し、もう 1 つは PHP4 を使用しました。
    コードをコピーします コードは次のとおりです:

LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ “d:/usr/local/php-5.0.4/”
FastCgiServer “d:/usr/local/php-5.0.4/php-cgi.exe” - プロセス 3
ScriptAlias /fcgi-php4/ “d:/usr/local/php-4.3.11/”
FastCgiServer “d:/usr/local/php-4.3.11/php.exe”
80を聞いてください
名前仮想ホスト *:80
DocumentRoot d:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php5.localhost
AddType application/x-httpd-fastphp5 .php
アクション application/x-httpd-fastphp5 “/fcgi-php5/php-cgi.exe”

IndexOptions FancyIndexing FoldersFirst
オプション インデックス FollowSymLinks マルチビュー
許可オーバーライドなし
注文の許可、拒否
すべてから許可

8080を聞いてください
NameVirtualHost *:8080

DocumentRoot d:/www
オプション インデックス FollowSymlinks マルチビュー
サーバー名 php4.localhost
AddType application/x-httpd-fastphp4 .php
アクション application/x-httpd-fastphp4 “/fcgi-php4/php.exe”

オプション インデックス FollowSymLinks マルチビュー
許可オーバーライドなし
注文の許可、拒否
すべて許可します

上の構成を使用し、http://localhost/ を使用して PHP5 を使用し、http://localhost:8080/ を使用して PHP4 を使用します。のPHP。
FastCGI モードのいくつかのポイント:
私の実際の使用例からわかるように、FastCGI モードの使用は、環境を作成するのに適しています。ただし、Zend Studio 調整プログラムを使用する場合は、 FastCGI は PHP プロセスのオーバータイムであると認識するため、トップページで 500 ビットのメッセージを返します。 最後に、Windows 中に FastCGI モードで潜在的な安

二、php nginx 中に実行モード (nginx+PHP-FPM ) の目前の理想的な選択

が常見的存在の 2 つのスタック: ligthttpd+spawn-fcgi を使用します。 ; 別の 1 つは nginx + PHP-FPM (spawn-fcgi も使用可能) です。 (1) 上で述べたように、この 2 つの構造はいずれも PHP サポートに FastCGI を採用しているため、HTTPServer が完全に解放され、より適切に動作し、処理できるようになります。

(2) この両者は、spawn-fcgi が lighttpd の一部であるため、通常、spawn-fcgi の php サポートを使用してインストールされますが、現時点では便利な spwan-fcgi を使用することもできます。高レベルでアクセスが行われると、高速 CGI が自動的に起動する場合でも、上部の内部ストレージ リークが発生する可能性があります。このとき、ユーザーがアクセスすると、ホワイト エラー (つまり、PHP が解析できないか出力できない) が発生する可能性があります。

もう一つ: 最初に enginx は lighttpd 自体に fastcgi(spawn-fcgi) を組み込んでいるため、完全に大量レベルであり、PHP を解析するには第 3 の方法の FastCGI プロセッサを使用する必要があるため、次のようになります。 nginx は常にアクティブであり、第 3 の方法で提供される解析プロセッサと接続して、PHP の解析を実行できます (nginx.conf に簡単に設定できます)。ただし、nginx を回避するために必要であり、いくつかの比較的早いブログには、この点でインストールされる教則が含まれています)、ただし、spawn-fcgi には上で説明したユーザーによる問題が徐々に発生しているため、nginx + spawn-fcgi の組み合わせの使用が遅くなります。

c。 spawn-fcgi の問題により、PHP-FPM (具体的には Google で検索できます) を呼び出す、新しい第 3 の方法 (現在も PHP コアへの組み込みが努力されている) の PHP の FastCGI プロセッサが登場しました。 -fcgi 比には次のような利点があります:

は PHP のパッチとして公開されており、インストール時に php ソースコードと一緒に承認されているため、つまり php コアへの承認が行われているため、パフォーマンスの面で優れています。

同時に、spawn-fcgi は処理速度が高く、高速 CGI プロセッサーを自動起動しないため、より優れています。現在のパフォーマンス优越、越来越多くの人がこの組み合わせを使用しています:nginx+PHP/PHP-FPM

3、IIS+ ISAPI モード このモードは、生成環境での使用が少なく、生成環境に適しています。 現在、HTTPServer ではこの基本的なスタック比の流行が 3 つ確認できます:

(1)Apache+mod_php5

(2)lighttp+spawn-fcgi

(3)nginx+PHP-FPM
3 つのどちらのパフォーマンスも優れている可能性がありますが、Apache は豊富なモジュールと機能を備えているため、現在では古いほうだと考えられています。 、nginx+PHP-FPM を使用する人はますます増えています。

以上は、さまざまな Web サーバーでの PHP に基づく実行モードの説明であり、側面の内容も含まれており、PHP 教則に関心のある友人の助けになることが望まれます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。