ホームページ  >  記事  >  バックエンド開発  >  PHP_PHPチュートリアルに基づいた各種Webサーバーの動作モードの詳細な説明

PHP_PHPチュートリアルに基づいた各種Webサーバーの動作モードの詳細な説明

WBOY
WBOYオリジナル
2016-07-21 15:09:44798ブラウズ

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 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。


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


4. FastCGI モードで PHP を実行する利点:
FastCGI モードで PHP を実行することには、いくつかの大きな利点があります。 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" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d :/usr/local/php-4.3.11/php.exe"
Listen 80
NameVirtualHost *:80
DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php5.localhost
AddType application/x-httpd-fastphp5 。 php
Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"

IndexOptions FancyIndexing FoldersFirst
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order許可、拒否
すべてから許可

Listen 8080
NameVirtualHost *:8080

DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php4.localhost
AddType application/x-httpd-fastphp4 .php
Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"

オプションインデックスFollowSymLinksマルチビュー
AllowOverrideNone
順序許可、拒否
すべてから許可

上記の構成では、http://localhost/にアクセスする場合はPHP5が使用され、http://localhost:8080/にアクセスする場合はPHP4が使用されます。したがって、適切に構成されていれば、異なる仮想ホストで異なるバージョンの PHP を使用できます。
FastCGI モードのいくつかの欠点:
利点について説明した後、欠点について説明します。実際に使用したところ、FastCGI モードは実稼働環境のサーバーに適しています。ただし、開発マシンには適していません。 Zend Studio を使用してプログラムをデバッグすると、FastCGI は PHP プロセスがタイムアウトしたと判断し、ページ上で 500 エラーを返すためです。これは非常に面倒だったので、開発マシンで ISAPI モードに戻しました。
最後に、Windows の FastCGI モードには潜在的なセキュリティ問題があります

2. nginx の PHP 実行モード (nginx+PHP-FPM) が現在理想的な選択です

FastCGI を使用する一般的なスタックは 2 つあります: lighthttpd+ spawn-fcgi; もう 1 つは nginx+PHP-FPM です (spawn-fcgi も使用できます)。
(1) 前述したように、どちらの構造も FastCGI を使用して PHP をサポートしているため、HTTPServer は完全に解放され、応答性が向上し、同時に処理できます。したがって、lighttpd と nginx は両方とも、小さいながらも強力で効率的であるという評判を得ています。

(2) また、spawn-fcgi は lighttpd の一部であるため、lighttpd がインストールされている場合、PHP をサポートするために spawn-fcgi が使用されることになりますが、現在一部のユーザーは、lighttpd の spwan を使用していると主張しています。・fcgiの同時アクセスが多いと上記のメモリリークが発生し、fastcgiでも自動的に再起動してしまいます。つまり、この時点でユーザーがアクセスすると、PHP スクリプト プロセッサがクラッシュし、白いページが表示される可能性があります (つまり、PHP を解析できないか、エラーが発生します)。

もう 1 つ: まず、nginx には lighttpd 自体のような fastcgi (spawn-fcgi) が含まれていないため、完全に軽量であり、PHP を解析するためにサードパーティの FastCGI プロセッサの助けが必要です。つまり、実際には次のようになります。この nginx は非常に柔軟で、サードパーティの解析プロセッサに接続して PHP 解析を実現できます (nginx.conf での設定は簡単です)。

nginx は spwan-fcgi を使用できます (lighttpd を一緒にインストールする必要がありますが、nginx ではポートを回避する必要があります。一部の古いブログにはこのインストールに関するチュートリアルがあります)。しかし、spawn-fcgi には、上記のようにユーザーが徐々に発見した欠陥があります。 . 、現在では nginx+spawn-fcgi の組み合わせの使用は徐々に減少しています。

c. spawn-fcgi の欠陥のため、新しいサードパーティ製 (現在も、近い将来 PHP コアに追加することに熱心に取り組んでいると聞きました) PHP 用の FastCGI プロセッサが登場しました。 FPM (詳細については Google で確認できます)。 spawn-fcgi と比較すると、次の利点があります:

PHP パッチとして開発されているため、インストール時に PHP ソース コードと一緒にコンパイルする必要があります。つまり、PHP コアにコンパイルされるため、パフォーマンスの点では優れています。同時に、高い同時実行性の処理においては spawn-fcgi よりも優れています。少なくとも、fastcgi プロセッサが自動的に再起動されることはありません。使用されている具体的なアルゴリズムと設計については、Google でご覧ください。

そのため、前述したように、nginx の軽量さと柔軟性により、現在のパフォーマンスは優れており、この組み合わせを使用する人が徐々に増えています: nginx+PHP/PHP-FPM
3 このモードは、nginx+PHP/PHP-FPM です。開発環境に適していますが、運用環境ではあまり使用されません。


4. 概要
現在、HTTPServer では基本的に 3 つの人気のあるスタックを見ることができます:

(1) Apache+mod_php5 (2) lighttp+spawn-fcgi
(3) nginx+PHP-FPM

3 つのうち、後の 2 つのパフォーマンスは若干優れている可能性がありますが、豊富なモジュールと機能により、Apache が依然としてリーダーです。 nginx+PHP-FPM は、同時実行性が高い条件下では Apache+mod_php5 の 5 ~ 10 倍に達する可能性があることをテストした人もいます。現在、nginx+PHP-FPM を使用する人が増えています。

http://www.bkjia.com/PHPjc/327257.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327257.html技術記事 1. Apache での PHP 実行モード。PHP には、CGI モード、FastCGI モード、Apache モジュール DLL の 3 つの動作モードがあります。 1. CGI モードとモジュール モードの比較:...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。