FastCGIモードでphp 7を実行

4378 ワード

よく知られているように、phpと組み合わせるweb serverは2つあり、apacheとnginxは、serverをコンパイルした後、phpファイルを正常に解析するために構成する必要があります.次に、2つのサーバがphpファイルをどのように解析するかを見てみましょう.
Nginx
一、主流のnginx+phpの運行原理は以下の通りである.
  • nginxのworkerプロセスは、nginxへの各要求のネットワーク要求を直接管理する.
  • phpは、ネットワーク全体でphpがcgiプログラムの役割であるため、php−fpmというプロセス管理プログラムを用いて要求されたphpプログラムを管理する.php-fpmプログラムもnginxのようにポートを傍受し、masterとworkerプロセスが必要です.workerプロセスは、各phpプロセスを直接管理します.
  • fastcgiについて:fastcgiはプロセスマネージャであり、cgiプロセスを管理します.市販されているfastcgi機能を実現したプロセスマネージャは、php-fpmの1つです.さらにphp-fpmはfast-cgiプロセス管理サービスとして、ポートを傍受し、一般的に9000ポートをデフォルトで傍受し、本機を傍受する、すなわち本機からのポート要求のみを受信するので、通常、コマンドnetstat -nlpt|grep php-fpmを入力すると、tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1078/php-fpm
  • が得られる.
  • fastcgiのプロファイルについては、現在fastcgiのプロファイルはnginxに一般的に配置する.conf同級ディレクトリの下で、プロファイル形式は、一般的に2種類あります:fastcgi.conffastcgi_params.異なるnginxバージョンには異なるプロファイルがあります.この2つのプロファイルにはfastcgi_という非常に重要な違いがあります.paramesファイルには次の構成が欠けています.fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_を開くことができます.paramesファイルに上記の行を加えて、構成を使用する場所で動的に追加することもできます.この構成を有効にします.
  • phpリクエストを処理する必要がある場合、nginxのworkerプロセスは、php−fpmのworkerプロセスにリクエストを渡して処理します.すなわち、最初に述べたnginxはphpを呼び出しますが、厳密にはnginxがphpを間接的に呼び出します.

  • 二、nginx構成はhostの簡単な構成を見てみましょう.
    server {
        listen       80;
        server_name  example.com;
        location ~ \.php?.*$ {
            root           /home/mark/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
  • 最初の括弧server{ }は言うまでもなく、独立したserver
  • を表す.
  • listen 80は、このserverの傍受8011ポート
  • を表す.
  • location ~ \.php?.*${ }は、対応するuriに一致するlocationを表し、一致するuri要求に対してカスタムの論理、構成を行うために使用される.ここのlocationは、すべてのバンドにマッチしています.phpのuriリクエスト
  • root /home/mark/wwwリソースルートディレクトリを要求し、locationの下に一致するuriから/home/mark/wwwフォルダに同じ名前のリソースを探すように伝えます.
  • fastcgi_pass 127.0.0.1:9000は、location内に入ったuri要求をcgiプログラムと見なし、9000ポートに要求を送信しphp−fpmに渡す.6.fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;動的に1行のfastcgi構成を追加し、構成内容はSCRIPT_FILENAMEで、管理プロセス、cgiスクリプト名を通知します.私のnginxにはfastcgiしかないのでparamsファイル、fastcgiがありません.confファイルなのでphp-fpmにSCRIPT_を知らせるFILENAMEの具体的な値は、この行の構成を動的に追加する必要があります.7、include fastcgi_params fastcgiプロファイル
  • を導入
    以上が最も簡潔なnginx起動phpスクリプトの最も簡単な構成であり、nginxを再起動した後、/home/mark/wwwディレクトリの下にhelloを作成する.phpファイルは、と入力して保存し、ブラウザでlocalhost/hello.phpにアクセスすると、hello worldがWebページに表示されます.
    Apache
    nginxに比べてapacheはfastcgiを構成するのが少し面倒で、SetHandler/ProxyPassMatch/ProxyPass/Mod_Rewriteはすべてできますが、ここでは公式に推奨されているProxyPassMatchの方法だけを話します.
  • ロードエージェントモジュール
  • LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 仮想ホストの構成
  • をサポート
    
        DocumentRoot "/home/mark/www"
        ServerName test.com
        DirectoryIndex /index.php index.php
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/home/mark/www/$1  
      
        Options none
        AllowOverride All
        Require all granted
      
    

    再起動apache、テスト下、ok~