由於更了解我希望實現的目標,感謝標記和他之前的回答,我發布了一個(希望)更清晰且略有不同的我之前問題的變體,因為該線程已達到飽和;
我正在嘗試讓多個 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 伺服器的根資料夾。
管理網站資料夾的選項
將您的網站上傳到具有相同資料夾路徑的 Nginx 伺服器和 PHP-FPM 伺服器
編寫腳本以將檔案同步到所有伺服器
對所有伺服器使用 GIT。
在 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 開始編譯!