web-dev-qa-db-ja.com

NginxおよびPHP FPM + PHP

Mark と彼の以前の answer のおかげで私が達成したいことをよりよく理解するために、(うまくいけば)より明確で少しだけ投稿しますそのスレッドが飽和に達したときの私の前の質問の別のバリエーション;

Nginxサーバーで複数のWordPress=サイトを実行します。各サイトには異なるバージョンのPHPが必要です。異なるバージョンを実行する複数のバージョンのPHP-FPMを使用してこれを実現したいと考えています。 nginxとは別のバージョンのPHP。

次に、.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ファイルを設定して、各PHP = FPMサーバーを定義する方法に関するガイダンスも必要ですWordPressサイトが使用します。

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

5
myol

私の経験では、次のような単純なサーバー構造で十分です。

仮定

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

サーバー環境の想定

1 x Nginxサーバー(フロントエンド、静的ファイルを処理するため)

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

1 xデータベースサーバー(別の別のサーバーまたはNginxサーバーのどちらでも問題ありません)

Nginxサーバーには、Public NetworkおよびPrivate Networkでアクセスできます

PHP-FPMサーバーとDBサーバーは、Nginxサーバーからのみアクセスできます(Private Network

Public Network、つまりインターネットを持っている人がアクセスできることを意味します。

プライベートネットワーク、特定のネットワークグループで見ることができます。 (クラス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から専用として作成していますが、PHP Webサイトのファイルは、TCPポートとUnixソケットの両方を介して渡すことはできません。

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

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

  1. 同じフォルダーPATHを使用してWebサイトをNginxサーバーとPHP-FPMサーバーにアップロードする

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

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

  4. Nginxまたは別の専用サーバーでのNFS(ネットワークファイルシステム)の作成

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

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

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

3番目に、数分でバックアップ(これは別の質問になります)

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

NFSを使用するとネットワーク遅延が発生する場合がありますが、管理を待機している複数のWebサイトについては、NFSが効率的で簡単な方法です。

「LinuxでのNFS」をGOOGLEして、このステップのインストールと構成を完了することができます。新しい場合は約1時間かかります。

ただし、NFSサーバーもプライベートネットワークにある必要があることに注意してください。

NFS、PHP-FPM、Nginxの両方が同じプライベートネットワークにある場合、ネットワークの待ち時間は短くなるはずです。

次に、nginx.confを設定しましょう

仮定

NginxパブリックIPは202.123.abc.abcで、80(またはSSLが有効な場合は443)をリッスンします

あなたのPHP-FPM 5.5は192.168.5.5にあり、9008を聞きます

あなたのPHP-FPM 5.6は192.168.5.6にあり、9008を聞きます

(追加の例)HHVM 3.4が192.168.5.7にあり、9008をリッスンします

PHP 5.5が最もよく使用されるPHP version

    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; 

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

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

仮定

別の1つのアプリケーションがPHP 5.6を使用している

別のアプリケーションが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 --no-check-certificate https://github.com/centos-z/EZHTTP/archive/master.zip?time= $(date +%s)-O server.Zip

$ unzip server.Zip

$ cd EZHTTP-master

$ chmod + x start.sh

$ ./start.sh

最初の画面で1を選択します

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

インストールするnginxのバージョンを確認するときに1を選択します(do_not_install)

インストールするMySQLのバージョンを確認するときに1を選択します(do_not_install)

インストールするPHPのバージョンを確認するときに、必要なバージョンを選択します

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

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

このシェルでコンパイルを始めましょう!

7
Mark