nginx+php実行リクエストの動作原理の詳細な説明

nginx+php実行リクエストの動作原理の詳細な説明

PHPの仕組み

まず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し​​て、phpの動作原理を理解しましょう。

CGI プロトコル

cgi プロトコルは、Web サーバー (nginx など) がコンテンツ配信サーバーに送信するデータと形式を決定するために使用されます。

php-cgi プロセスインタープリタ

php-cgi は、php の CGI プロトコル プロセス インタープリタです。起動するたびに、php.ini ファイルの読み込み -> 実行環境の初期化 -> リクエストの処理 -> コンテンツを Web サーバーに返す -> php-cgi プロセスの終了というプロセスを実行する必要があります。

FastCGI プロトコル

fastcgi プロトコルは、cgi プロトコルの効率改善を補完するものです。主に、リクエストが届くたびに cgi インタープリタ プロセスを開始する必要性を最適化することを目的としています。cgi インタープリタ プロセスは、Web サーバー リクエストを受け取るたびに php.ini ファイルを再読み込みして実行環境を初期化する必要がなくなりました。

php-fpm プロセス マネージャー

PHP-FPM は FastCGI プロトコルの実装です。これはプロセス マネージャーです。起動すると、マスター プロセスとワーカー プロセスの 2 つの部分が含まれます。マスター プロセスはポートをリッスンし、Web サーバーからの要求を受信します。通常、ワーカー プロセスは複数あります。各ワーカー プロセスには、PHP コードを実行する CGI プロセス インタープリターがあります。

PHPの起動と動作原理

phpfpm を起動すると、マスタープロセスが起動され、php.ini ファイルが読み込まれ、実行環境が初期化され、複数のワーカープロセスが起動されます。リクエストが届くたびに、ワーカープロセスに渡されて処理されます。

PHP スムーズ再起動の原則

php.ini の設定が変更されて再起動されるたびに、新しいワーカー プロセスが開始されて新しい設定がロードされ、作業が完了すると既存のプロセスが破棄されるため、スムーズな再起動が実現します。

nginxの仕組み

nginx と php の連携の原理を理解したい場合は、まず nginx 構成ファイルのサーバー部分も理解する必要があります。

サーバー{
  listen 80; #ポート80をリッスンし、httpリクエストを受信します server_name www.example.com; #一般的に、どのプロジェクトが構成されているかを示すURLを保存します root /home/wwwroot/zensmall/public/; #コードのルートディレクトリアドレスまたはコードスタートアップエントリ index index.php index.html; #Webサイトのデフォルトのホームページ #要求されたWebサイトのURLがlocationでプレフィックスマッチを実行し、最も長く一致する文字列がこの構成項目である場合、ファイルが存在するかどうかを順番にチェックし、最初に見つかったファイルを返します location / {
     #try_files は、ファイルが存在するかどうかを順番にチェックし、見つかった最初のファイルを返します。#$uri は、リクエスト パラメータのない現在のアドレスを表します。#$query_string は、リクエストによって運ばれるパラメータを表します。try_files $uri $uri/ /index.php?$query_string; #$uri ファイルをチェックして、$uri アドレスが存在するかどうかを確認します。存在する場合は、見つかった最初のファイルを返します。どちらも存在しない場合は、/index.php?$query_string にアクセスするための内部リクエストを開始します。これは、次の場所リクエストと再照合されます。}
  
   #ウェブサイトのphpファイルを要求すると、リバースプロキシはphp-fpmに送信され、場所〜\.php$ {を処理します。
     include fastcgi_params; #fastcgi 設定ファイルを導入します fastcgi_pass 127.0.0.1:9000; #php fastcgi プロセスがリッスンする IP アドレスとポートを設定します fastcgi_index index.php; #ホームページ ファイルを設定します fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #スクリプト ファイル リクエストのパスを設定します}
}

上記のサーバー構成の全体的な意味は、nginx がポート 80 で URL 要求をリッスンするたびに、URL の場所の一致を実行するということです。 / ルールが一致すると、内部リクエストのリダイレクトが行われ、/index.php?$query_string への内部リクエストが開始され、対応する場所構成ルールによって、ポート 9000 でリッスンしている php-fpm のマスター プロセスにリクエストが送信されます。

要約する

最も単純なユーザー リクエスト プロセスを以下にまとめます。

ユーザーがドメイン名にアクセス -> ドメイン名の DNS 解決 -> 対応する IP サーバーとポートへのリクエスト -> nginx が対応するポートのリクエストをリッスン -> nginx が URL の場所を一致 -> 一致した場所のルールを実行 -> nginx がリクエストを php に転送 -> php-fpm マスター プロセスが nginx リクエストをリッスン -> マスター プロセスがアイドル状態のワーカー プロセスの 1 つにリクエストを割り当て -> ワーカー プロセスがリクエストを実行 -> ワーカー プロセスが実行結果を nginx に返す -> nginx が結果をユーザーに返す

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx設定の原理と実装プロセスの詳細な説明https
  • Nginx URL 書き換えメカニズムの原理と使用例
  • Nginx フォワードプロキシとリバースプロキシの違いと原理分析
  • Nginx のリロード プロセスの背後にある真実を探る
  • Nginx サーバーの負荷分散と SSL の原理、SSL キー ペアの生成、Nginx 構成の SSL 操作の例
  • Nginxの仕組みの詳細な説明

<<:  MySQL データ ウェアハウスを保護するための 5 つのヒント

>>:  React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

推薦する

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...

Mysql5.7 で JSON 操作関数を使用する手順

序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...

dns-prefetch とは何ですか? フロントエンドの最適化: DNS の事前解決によりページ速度が向上します

目次背景1. dns-prefetch とは何ですか? 2. dns-prefetch を設定するに...

VMware Workstation と vSphere 間で仮想マシンを移行する (画像とテキスト)

1. Workstationで仮想マシンのハードウェアバージョンを変更するWorkstation ...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

Vue フィルター、ライフサイクル関数、vue-resource の簡単な紹介

1. フィルター例: <!DOCTYPE html> <html lang=&qu...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

この記事では、Vue 3.0 レスポンシブの使い方を説明します。

目次ユースケースリアクティブAPI関連プロセス反応的なcreateReactiveObjectはレス...

HTML での select optgroup タグの使用の概要

時々、選択した内容をグループ化する必要があります。以前はプログラム制御を使用していました。今日、se...

JS で async と await を使用する方法

目次1. 非同期2. 待つ: 3. 包括的なアプリケーション1. 非同期async 、非同期コードが...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

WeChatアプレットが左右連携を実現

この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。...

JavaScript進捗管理の詳しい説明

目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...

OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

導入パート1: 冒頭に書いたOneProxy は、民間ソフトウェアによって完全に独立して開発された分...

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...