nginx+php実行要求の動作原理

2506 ワード

php動作原理
まず、よく聞くcgi、php-cgi、fastcgi、php-fpmがどのような関係なのかを理解し、phpの動作原理を理解するのに役立ちます.
cgiプロトコル
cgiプロトコルは、nginxなどのwebserver、すなわちコンテンツ配信サーバからどのようなデータが伝達され、どのようなフォーマットのデータが伝達されるかを決定するために使用される.
php-cgiプロセス解釈器
php-cgiはphpのcgiプロトコルプロセス解釈器であり、起動するたびにphpのロードを経験する必要がある.iniファイル->実行環境の初期化->要求の処理->webserver->php-cgiプロセスにコンテンツを返すプロセス
fastcgiプロトコル
fastcgiプロトコルはcgiプロトコルの効率向上に対する補充であり、主に要求が来るたびにcgi解釈器プロセスの最適化を開始する必要があり、cgi解釈器プロセスがwebserver要求を受け取るたびにphpを再ロードする必要はない.iniファイルと初期化実行環境
php-fpmプロセスマネージャ
php-fpmはfastcgiプロトコルの実装であり、プロセスマネージャであり、起動時にmasterとworkerプロセスの2つの部分を含み、masterプロセスリスニングポート、webserverからの要求を受信し、workerプロセスは一般的に複数あり、各workerプロセスにはphpコードを実行するためのcgiプロセス解釈器がある.
php起動と動作原理
phpfpmを起動するとmasterプロセスが起動しphpがロードされます.iniファイル、実行環境を初期化し、複数のworkerプロセスを開始します.リクエストが来るたびにworkerプロセスにリクエストが渡されて処理されます
phpスムーズ再起動原理
phpを修正するたびにIniが構成して再起動すると、新しいworkerプロセスが起動して新しい構成がロードされ、以前に存在していたプロセスは作業が完了した後に破棄されるため、スムーズな再起動が実現します.
nginx動作原理
nginxとphpの組み合わせの原理を理解するには、nginxのプロファイルのserver部分を理解する必要があります.
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; #           
    }
}

上のserver構成の全体的な意味は、nginxが80ポートのurl要求を傍受するたびにurlがlocationマッチングされることです./ルールに一致すると、内部要求のリダイレクトが行われ、/indexが開始する.php?$query_stringの内部リクエストですが、対応するlocation構成ルールは9000ポートのphp-fpmを傍受するmasterプロセスにリクエストを送信します.
まとめ
最も簡単なユーザー要求プロセスをまとめます.
ユーザアクセスドメイン名->ドメイン名DNS解析->対応するIPサーバとポートへの要求->nginx対応するポートへのリスニング要求->nginx urlへのlocationマッチング->一致するlocationでのルールの実行->php->php-fpmへのnginx転送要求のmasterプロセスnginx要求->masterプロセス保留中のworkerプロセスに要求を割り当てる->workerプロセス実行要求->workerプロセス実行要求->workerプロセスは実行結果をnginx->nginxに返し、結果をユーザーに返す