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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL データ ウェアハウスを保護するための 5 つのヒント
>>: React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法
XHTML 言語では、ul タグに li が含まれ、dl タグに dt と dd が含まれることは誰...
この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...
MySQL(5.6以下)はjsonを解析します #json 解析関数 DELIMITER $$ `j...
序文元のプロジェクトは、パブリックネットワークgitlabに配置されていました。セキュリティ上の理由...
テキストエリアタグのサイズは不変ですコードをコピーコードは次のとおりです。 <textarea...
導入1.<iframe> タグ: iframe は、ページ内に内部フレームを生成するイン...
この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...
MySQL 起動エラーWindows 10 に MySQL をインストールする前は、net star...
1. デッドロックとは何ですか?正式な定義は次のとおりです: 2 つのトランザクションが相手側で必要...
目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...
【背景】最近勉強中に非常に恥ずかしいことに遭遇しました。MySQL のパスワードを忘れてしまい、My...
構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...
1. redisイメージを検索する docker 検索 redis 2. Redisイメージをダウン...
一般的に言えば、より完全な結果を得るためには、2 つ以上のテーブルから結果を取得する必要があります。...