Nginx和不同版本的PHP FPM + PHP

Nginx和不同版本的PHP FPM + PHP

由於更了解我希望實現的目標,感謝標記和他之前的回答,我發布了一個(希望)更清晰且略有不同的我之前問題的變體,因為該線程已達到飽和;

我正在嘗試讓多個 WordPress 網站在 nginx 伺服器上運行,其中每個網站都需要不同版本的 PHP。我希望透過使用多個版本的 PHP-FPM 來實現這一點,每個版本都運行不同版本的 PHP,與 nginx 分開。

然後,我想使用.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

根據我的經驗,如下的簡單伺服器結構足以滿足您的情況。

假設

您大約有兩個小時的時間來設定它們。

伺服器環境假設

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專用,但是網站的PHP檔案不能同時透過TCP埠和Unix Socket傳遞。

因此,您必須管理 Web 伺服器的根資料夾。

管理網站資料夾的選項

  1. 將您的網站上傳到具有相同資料夾路徑的 Nginx 伺服器和 PHP-FPM 伺服器

  2. 編寫腳本以將檔案同步到所有伺服器

  3. 對所有伺服器使用 GIT。

  4. 在 Nginx 或其他專用伺服器上建立 NFS(網路檔案系統)

如果您使用的是 *nix 系統,我建議使用第四個選項,因為,

首先,在一台伺服器上管理所有網站文件

二、非常容易維護

三、分鐘備份(這應該是另一個問題)

※ NFS伺服器作為您網站的純粹儲存伺服器

有些人可能會認為使用 NFS 會導致網路延遲,但是對於多個等待管理的網站,NFS 是一種高效且簡單的方式。

您可以GOOGLE“NFS on Linux”來完成安裝和設定這一步驟,較新的大約需要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 版本

    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

您有另一個應用程式正在使用 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;
     }

透過這種方式,您甚至可以為您的虛擬主機新增不同的 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

$ 解壓縮伺服器.zip

$ cd EZHTTP-master

$ chmod +x start.sh

$ ./start.sh

在第一個畫面中選擇 1

在第二個畫面中選擇 1 (LNMP)

當詢問你要安裝哪個版本的nginx時選擇1(do_not_install)

當詢問你要安裝哪個版本的mysql時選擇1(do_not_install)

當詢問您要安裝哪個版本的 PHP 時,選擇您想要的版本

所有設定保持預設(讓您以後輕鬆管理PHP-FPM)

選擇您想要的額外擴展,當然您可以忽略,因為所有常見擴展都會稍後安裝。

讓這個 shell 開始編譯!

相關內容