どのようにnginxのとPHPの間には、PHP UnixソケットおよびTCPソケットと通信するためのインタラクティブな?nginxの二つの方法であります

nginxの+ PHP-FPM実装原理

Nginx本身不会对PHP进行解析,终端对PHP页面的请求将会被Nginx交给FastCGI进程监听的IP地址及端口,由php-fpm作为动态解析服务器处理,最后将处理结果再返回给nginx。其实,Nginx就是一个反向代理服务器。Nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的原理。

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。

FastCGIプロセスマネージャとしてPHP-FPM、メモリ、および効果的プロセスを制御し、PHPリロード構成を平滑化することができます。PHP5.3後、PHP-FPMは、コアPHP、デフォルトのインストール、設定なしに統合します。

FastCGIプロセスマネージャのphp-FPM自身の初期化、メインプロセスのphp-FPMを開始しstart_serversにFastCGIの子プロセスを起動します。主にメインプロセスのphp-FPM FastCGIの子プロセス管理、9000ポートをリスニング子プロセスのFastCGIの要求を待っています。クライアントの要求は、命令でnginxの、nginxの場所に到着すると、すべてのPHPの接尾辞127.0.0.1:9000ファイルが処理されます。PHP-FPMのFastCGIは、選択と子プロセスに接続され、標準入力と環境変数は子プロセスに送られたFastCGI。標準出力とエラーメッセージが返された後のFastCGI子プロセスは、プロセスを完了します。FastCGIの子プロセスが接続要求が処理を完了するために来る閉じると、次の取引を待ちます。

オリジナルリンク:https://blog.csdn.net/zhaoliang831214/article/details/51333831

7段階のA、nginxのとPHPの相互作用(動的PHPページをユーザーがプロセスにアクセス)

STEP1:サーバ(ユーザと三方ハンドシェークnginxのサーバーのTCP接続)へのユーザnginxのHTTPリクエスト
ステップ2:要求URIとユーザアクセスサフィックスに従って決定することがnginxの
STEP3:としては、第二のステップは、ユーザの要求によって見ることができます動的コンテンツ、nginxのFastCGIの要求がクライアントに引き渡される、PHP-FPMにfastcgi_passユーザの要求を経由して送信されます
、それは静的なリソースであるユーザーが訪れる場合、それは簡単です、nginxの戻り直接ユーザーに、ユーザーが要求した静的リソースへ。
STEP4:リクエストラッパーのphp-FPMを裏返し受け取った後、ラッパーは新しいスレッドがPHPの動的プログラム解析サーバの呼び出しを作成します
STEP5を:PHPが戻ってnginxのに結果を照会します
STEP6:応答メッセージを作成し、結果を返しますnginxのユーザー
これはちょうどnginxのユーザー要求の一つであり、ユーザの要求の結果を返すには、ユーザーはnginxの中で行うには、リソースの転送を要求され、nginxのは、サーバーに直接リソースを解析されている、同期することができる、非同期でありますユーザーに返さリソースは、nginxのトランジットをしません。ステップ4:PHP-FPMにfastcgi_pass動的リソースは、PHP-FPMリソースは、PHPスクリプト解決サーバラッパー転送されます

すなわち:nginxの - >のFastCGI - > PHP-FPM - > FastCGIのラッパー - > PHPリゾルバ

CGIは、FastCGIは永久的なプロセスのためのCGIモデルプログラムで、コモン・ゲートウェイ・プロトコルです。私たちは、PHP-FPMは、PHP-FPMは、ユーザーの設定によって、FastCGIプロセスの数を管理することになるでPHPのFastCGIプロセスマネージャ、の略知っている、例えば、PHP-FPMの管理の下でFastCGIプロセスは、PHP-FPMをもとに、ハングアップ本当の収束nginxのとPHPをFastCGIプロセスである一方、ビューのユーザー設定のポイントあなたが完了したことを再起動したい場合は、PHP-FPMは、より多くのマネージャーのようなものです。

CGI-APPの下流図は、FastCGIのPHPプログラムです。上流はnginxのFastCGIのある、それらの間の通信媒体、即ち、図ソケットがあります。図3以上、fastcgi_passの構成の内容で、当社のコンフィギュレーション・ファイルでは、あなたはソケットファイル、ここでマシンに転送されたユーザの要求、あなたが私たちの、図3に前方へ行くを受け取った後、nginxのを伝えることですfastcgi_passしばしば、それは、httpインターフェースアドレス(これはPHP-fpm.confに配置されてもよい)として構成される。プリフォーク図5にある間、私達のPHP-FPMの開始に対応し、即ち多くのFastCGIは、我々はPHP-FPM起動時にトリガー(FastCGIのラッパー)は、ユーザに応じて配置を開始します

PHPは、拡張Webサーバー指向プログラミングを提供するために、SAPIを提供します。あなたがWebサーバーの独立した研究開発を行う場合、あなたはSAPIを学ぶ必要がある、とあなたのウェブサーバのプログラムでそれを実装することが、このアプローチは手段。あなたのWebサーバーとPHPのカップリングを作成することをこれが意味。カップリングソリューション:CGIプロトコル、より良い方法は、それが下流の互換性があり、一般的な仕様を持つことです。CGIプロトコルはnginxのになったので、PHPは道を受け入れて喜んでいる、と下流の高い並列性を持っているかもしれプログラムをさせるのはFastCGIモード恒久的プロセス。

第二に、PHP nginxの-unixソケットとTCPソケットとの通信の二つの手段

図1に示すように、両方の構成nginxの

Unixソケット

nginxの設定ファイルを実行しているPIDファイルのアドレスのphp-FPMを入力する必要があります。

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
}

TCPソケット

nginxの設定ファイルを実行しているIPアドレスとポート番号のphp-FPMを入力する必要があります。

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
}

図2に示すように、両方の比較的

あなたは上の写真から見ることができ、UNIXソケットは不要なオーバーヘッドを削減し、ループバックを通過するTCP必要はなく、一時的なTCPポートおよび関連リソースに適用するTCP。同時不安定な接続の高い数が勃発したとき、Unixソケットは、長期キャッシュの大規模な量が、コネクション指向のプロトコルでのサポートがないときしかし、大規模なデータパケットは、例外が返されないエラーを指示することができます。このようなTCPコネクション指向のプロトコルは、通信回数の正確性および完全性を保証することができます。

3、選択勧告:nginxのとPHP-FPMは、同じサーバ上で実行されている場合、その量は、それがローカルであるので、あなたは、軽いため、より高速な検査動作(ルーティングなど)のいくつかを回避し、できる、Unixソケットを選択し、1000年の同時を超えていません。並行性の高い事業に直面した場合、私は効率性を維持するために、コア手段の、最適化、運用・保守を負荷分散するために、より信頼性の高いTCPソケットを使用することを選ぶだろう。

おすすめ

転載: www.cnblogs.com/djwhome/p/12536222.html