ホームページ  >  記事  >  バックエンド開発  >  nginx+php はリクエストをどのように実行しますか?動作原理の紹介

nginx+php はリクエストをどのように実行しますか?動作原理の紹介

青灯夜游
青灯夜游転載
2019-02-26 10:36:512486ブラウズ

nginx php はどのようにリクエストを実行しますか?以下の記事では、nginx php 実行リクエストの動作原理を紹介しますので、参考になると思いますので、困っている方は参考にしていただければ幸いです。

php の動作原理

まず、cgi、php-cgi、fastcgi、php-fpm の関係を理解し​​ましょう。 php

cgi プロトコルの動作原理を理解するのに役立つように、よく耳にします。

cgi プロトコルは、Web サーバー (たとえば、 nginx として)、コンテンツ配信サーバーの配信です。 どのようなデータが送信され、どのような形式で送信されますか。

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

php -cgi は php の CGI プロトコル プロセス インタプリタであり、起動するたびに、php.ini ファイルのロード -> 実行環境の初期化 -> リクエストの処理 -> コンテンツをwebserver ->php-cgi process exit

fastcgi プロトコル

fastcgi プロトコルは、cgi プロトコルの効率向上を補足するものです。これは主に、リクエストが来るたびに CGI インタープリタ プロセスを開始する必要があるために最適化されていますが、Web サーバー リクエストを受信するたびに、CGI インタープリタ プロセスは php.ini ファイルをリロードし、実行環境を初期化する必要がなくなりました

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

php-fpm は、fastcgi プロトコルの実装であり、マスター プロセスとワーカー プロセスを含むプロセス マネージャーです。起動時にマスター プロセスがポートをリッスンし、Web サーバーからリクエストを受信します。通常は複数のワーカー プロセスがあり、各ワーカー プロセスには PHP コードの実行に使用される CGI プロセス インタプリタがあります

#php の起動と動作原理

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

php スムーズ リスタート原則

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

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

server {
    listen       80; #监听80端口,接收http请求
    server_name  www.example.com; #一般存放网址,表示配置的哪个项目
    root /home/wwwroot/zensmall/public/; # 存放代码的根目录地址或代码启动入口
    index index.php index.html; #网站默认首页
    
    #当请求网站的url进行location的前缀匹配且最长匹配字符串是该配置项时,按顺序检查文件是否存在,并返回第一个找到的文件
    location / {
          #try_files,按顺序检查文件是否存在,返回第一个找到的文件
          #$uri代表不带请求参数的当前地址
          #$query_string代表请求携带的参数
          try_files   $uri $uri/ /index.php?$query_string; #按顺序检查$uri文件,$uri地址是否存在,如果存在,返回第一个找到的文件;如果都不存在,发起访问/index.php?$query_string的内部请求,该请求会重新匹配到下面的location请求
    }
    
     #当请求网站的php文件的时候,反向代理到php-fpm去处理
    location ~ \.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 の内部リクエストが開始され、対応する場所設定ルールによってポートでリッスンする php-fpm のマスター プロセスにリクエストが送信されます。 9000

概要

次に、最も単純なユーザー要求プロセスを要約します。 ユーザーはドメイン名にアクセスします - > ドメイン名前が DNS 解決を実行します -> 対応する IP サーバーとポートにリクエストします -> nginx が対応するポートのリクエストをリッスンします -> nginx が URL で位置一致を実行します -> 一致する場所に基づいてルールを実行します -> nginx がリクエストを php->php-fpm に転送します マスター プロセスが nginx リクエストをリッスンします -> マスター プロセスがアイドル状態のワーカー プロセスの 1 つにリクエストを割り当てます -> ワーカー プロセスがリクエストを実行します -> ワーカープロセスは実行結果をnginxに返します->nginxは結果をユーザーに返します

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がnginx+php はリクエストをどのように実行しますか?動作原理の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。