ホームページ >バックエンド開発 >PHPチュートリアル >nginx と php がリクエストを実行する原理の紹介

nginx と php がリクエストを実行する原理の紹介

不言
不言転載
2019-02-25 09:53:212268ブラウズ

この記事では、nginx と php の実行リクエストの原理を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

まずは、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し​​て、php

cgiの動作原理を理解しましょう。プロトコル

CGI プロトコルは、Web サーバー (nginx など)、つまり、コンテンツ配信サーバーによって渡されるデータとデータの形式を決定するために使用されます。

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

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

fastcgi プロトコル

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

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

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

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 は結果を に返しますユーザー#########

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

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