nginx は http リクエストを受信すると、設定ファイルを通じて対応するサーバーを見つけます。次に、サーバー内のすべての場所を照合し、最も一致する場所を見つけます。その場所のコマンドは、書き換えモジュールやインデックス モジュールなど、作業を完了するためにさまざまなモジュールを開始します。したがって、nginx のモジュールは実際のワーカーとみなすことができます。 nginx モジュールは静的な方法で nginx にコンパイルされます。 nginx を起動すると、モジュールが自動的にロードされます。 Apacheとは異なり、モジュールは別途soファイルにコンパイルされ、ロードするかどうかは設定ファイルで指定されます。したがって、モジュールの読み込みだけに関して言えば、nginx は Apache よりも高速です。
では、nginx はどのようにして php を呼び出すのでしょうか?まず、以下の nginx の php の設定を見てください
location ~ \.php$ { root /webpath; fastcgi_pass 127.0.0.1:9000; … ... }
このロケーション ディレクティブは、php をファイル サフィックスとして持つリクエストを、処理のために 127.0.0.1:9000 に渡します。これを見た時点で、これは C/S アーキテクチャの問題であることがわかると思います。 ここでの IP アドレスとポート (127.0.0.1:9000) は、fastcgi プロセスがリッスンする IP アドレスとポートです。 fastcgi は、http サーバーと動的スクリプト言語間のスケーラブルな高速通信インターフェイスです。 Apache、nginx、lighttpd など、最も一般的な http サーバーは fastcgi をサポートしています。同時に、fastcgi は php を含む多くのスクリプト言語でもサポートされています。
では、この fastcgi 設定の IP とポートはどこから来たのでしょうか? php-fpm.conf で次の内容を確認できます:
listen = 127.0.0.1:9000 #这个表示php的fastcgi进程监听的ip地址以及端口 pm.start_servers = 2 php-fpm作为fastcgi的进程管理器,可以有效控制内存和进程,并且平滑重载php配置。php5.3以后,php-fpm被集成到php的core中,默认安装,无须配置。
fastcgi プロセス マネージャー php-fpm は自身を初期化し、メイン プロセス php-fpm を開始し、start_servers fastcgi サブプロセスを開始します。メインプロセス php-fpm は主に fastcgi サブプロセスを管理し、ポート 9000 をリッスンし、fastcgi サブプロセスはリクエストを待機します。クライアントリクエストが nginx に到達すると、nginx は location ディレクティブによる処理のために、サフィックスとして php を持つすべてのファイルを 127.0.0.1:9000 に渡します。 php-fpm は、fastcgi 子プロセスを選択して接続し、環境変数と標準入力を fastcgi 子プロセスに送信します。 fastcgi サブプロセスは処理を完了すると、標準出力とエラー情報を返します。 fastcgi 子プロセスが接続を閉じると、リクエストは処理され、次の処理を待機します。
通常の cgi モードはプロセスですが、リクエストが来るたびにプロセスをフォークする必要があるため、効率が遅くなります。
そのため、高速 cgi fpm は高速 cgi マネージャーです。プロセスですが、サービスであるプリフォークが行われます。開始時に、一部のプロセスは最初にフォークされ、処理要求を待機します。
Nginx と PHP-FPM のスクリプトを開始、再起動、停止する
nginx と PHP のアップロード ファイル サイズ制限を設定する
Mac での nginx と php_PHP のインストールに関するチュートリアル
以上がnginxとphpの仕組みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。