Nginx と PHP の異なるバージョン FPM + PHP

Nginx と PHP の異なるバージョン FPM + PHP

私が達成したいことをよりよく理解できたおかげでマークそして彼の以前の答え、そのスレッドが飽和状態に達したため、以前の質問の(うまくいけば)より明確で少し異なるバリエーションを投稿します。

私は、nginx サーバー上で複数の WordPress サイトを実行しようとしていますが、各サイトには異なるバージョンの PHP が必要です。これを実現するには、nginx とは別に、それぞれ異なるバージョンの PHP を実行する複数のバージョンの PHP-FPM を使用します。

次に、.confファイルを使用して各サイトが使用する PHP-FPM サーバーを制御し、そのサイトが目的の PHP バージョンで実行できるようにします。コメントセクション)

現在、testsite1 のサーバー ブロックは次のようになり、デフォルトの PHP バージョンが実行されています。

server {
    listen 80;
    listen [::]:80;

    root /usr/share/nginx/html/testsite1;
    index index.php index.html index.htm;

    server_name local.testsite1.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

これは にあり/var/nginx/sites-available/testsite1、 にシンボリックリンクされています/var/nginx/sites-enabled/testsite1。各サーバーブロックは 内の別のファイルにあります。sites-available

testsite1
testsite2
testsite3

私は異なるバージョンの PHP (5.3.3) をコンパイルしましたが、複数の PHP-FPM サーバーを設定する方法と、それぞれが異なるバージョンの PHP を指すようにする方法がわかりません。また、.conf各 WordPress サイトが使用する PHP-FPM サーバーを定義する複数のファイルを設定する方法についてもアドバイスが必要です。

(基本的に、プロセス全体を通して手助けが必要です...)

答え1

私の経験では、次のようなシンプルなサーバー構造で十分です。

予測

セットアップには約 2 時間かかります。

サーバー環境の想定

1 x Nginx サーバー (フロントエンド、静的ファイルの処理用)

2 x PHP-FPM サーバー (バックエンド、PHP スクリプトの処理用)

1 x データベース サーバー (別のサーバーまたは Nginx サーバーでもかまいません)

Nginxサーバーには以下からアクセスできます公共のネットワークそしてプライベートネットワーク

PHP-FPMサーバーとDBサーバーはNginxサーバーからのみアクセスできます(プライベートネットワーク

公共のネットワークつまり、インターネットを持っている人なら誰でもアクセスできるということです。

プライベートネットワーク特定のネットワーク グループで確認できます。(クラス A、クラス B、クラス C。例: 192.xx.xx.xx または 10.xx.xx.xx または 172.xxx.xxx.xxx)

Linode と DigitalOcean で VPS を使用している場合、どちらもプライベート ネットワーク IP を提供しているので、それらの指示に従って設定できます。

そうでない場合は、自分で設定できますVPN(仮想プライベートネットワーク)または、ルーターを使用して構築することもできます。これは簡単で、必要なものはすべて Google で検索できます。

Ubuntu を使用している場合、VPN の設定には 5 分もかかりません。

次のステップの前に、潜在的な攻撃を防ぐためにファイアウォール ルールを設定することをお勧めします。(IPTABLES またはそのラッパーである FirewallD を使用)

PHP-FPM を Nginx 専用として作成していますが、Web サイトの PHP ファイルは TCP ポートと Unix ソケットの両方を介して渡すことはできません。

したがって、Web サーバーのルート フォルダーを管理する必要があります。

ウェブサイトフォルダを管理するためのオプション

  1. 同じフォルダパスを持つNginxサーバーとPHP-FPMサーバーにWebサイトをアップロードする

  2. すべてのサーバーにファイルを同期するスクリプトを作成します

  3. すべてのサーバーに GIT を使用します。

  4. Nginx または他の専用サーバー上に NFS (ネットワーク ファイル システム) を作成する

*nixシステムを使用している場合は、次の理由から4番目のオプションをお勧めします。

まず、すべてのウェブサイトファイルを1つのサーバーで管理します

第二に、メンテナンスが非常に簡単

3 つ目は、数分でバックアップすることです (これは別の質問です)

※NFSサーバーはウェブサイトの純粋なストレージサーバーとして機能します

NFS を使用するとネットワーク遅延が発生すると考える人もいるかもしれませんが、管理待ちの複数の Web サイトの場合、NFS は効率的で簡単な方法です。

この手順のインストールと構成を完了するには、「NFS on Linux」を Google で検索してください。新しいバージョンの場合は約 1 時間かかります。

ただし、NFSサーバーはプライベートネットワーク同じように。

NFS、PHP-FPM、Nginxが同じディレクトリにある場合プライベートネットワーク、ネットワークの遅延が少なくなるはずです。

それでは設定しましょうnginx.conf

予測

Nginx のパブリック IP は 202.123.abc.abc、listen 80 (SSL が有効な場合は 443) です。

PHP-FPM 5.5 は 192.168.5.5 にあり、9008 を listen しています

PHP-FPM 5.6 は 192.168.5.6 にあり、9008 を listen しています

(追加の例) HHVM 3.4 は 192.168.5.7 にあり、9008 を listen しています。

PHP 5.5が最もよく使われるPHPバージョンだと考えている

    server {

         listen 80 default server;
         server_name frontend.yourhost.ltd;
         #root PATH is where you mount your NFS
         root /home/www;   
         index index.php;

    location ~ \.php$ {
        try_files  $uri $uri/ = 404;
        fastcgi_pass   192.168.5.5:9008;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE  open_basedir=$document_root:/tmp/:/proc/;
        include fastcgi_params;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_intercept_errors on;

    }

    }
#Here to set up you vhosts
include vhosts/*.conf; 

上記の行は最後の行の前に置く必要があります}

vhosts次に、フォルダ内にというフォルダを作成します。nginx.conf

予測

PHP 5.6を使用しているアプリケーションがもう1つあります

HHVMを使用している別のアプリケーションがあります

PHP 5.6の場合 (vhosts/app1.conf)

       server {
         server_name app1.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app1;
         #Include your rewrite rules here if needed
         include rewrite/app1.conf;

         location ~ \.php($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.6:9008;
             fastcgi_index  index.php;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
            fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app1/access.log access;
        error_log  /var/wwwlog/app1/error.log error;
     }

HHVMの場合 (vhosts/app2.conf)

       server {
         server_name app2.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app2;
         #Include your rewrite rules here if needed
         include rewrite/app2.conf;

         location ~ \.hh($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.7:9008;
             fastcgi_index  index.hh;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.hh)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
             fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app2/access.log access;
        error_log  /var/wwwlog/app2/error.log error;
     }

この方法では、vhost に異なる SSL 証明書を追加することもできます。

サーバーを再起動してお楽しみください!

編集済み

異なるバージョンの PHP-FPM をインストールするには、自分でコンパイルするか、既存のスタックを使用します。

https://github.com/centos-bz/EZHTTP/archive/master.zip 時間を節約するためにお勧めします

方法を使用する(マシンにWGETとUNZIPがインストールされていると仮定)

$ wget --証明書をチェックしないhttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(日付 +%s) -O server.zip

$ server.zip を解凍します

$ cd EZHTTPマスター

$ chmod +x start.sh

$ ./start.sh

最初の画面で1を選択

2番目の画面で1を選択(LNMP)

インストールする nginx のバージョンを尋ねられたら 1 を選択します (do_not_install)

インストールする MySQL のバージョンを尋ねられたら 1 を選択します (インストールしない)

インストールするPHPのバージョンを尋ねられたら、必要なバージョンを選択します。

すべての設定をデフォルトのままにします(将来PHP-FPMを簡単に管理できるようにします)

必要な追加拡張機能を選択します。もちろん、一般的な拡張機能はすべて後でインストールされるため、無視できます。

このシェルのコンパイルを開始しましょう。

関連情報