由于更好地理解了我想要实现的目标,感谢标记以及他之前的回答,我正在发布一个(希望)更清晰、与我之前的问题略有不同的版本,因为该线程已达到饱和;
我正在尝试在 nginx 服务器上运行多个 WordPress 站点,每个站点都需要不同版本的 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 个数据库服务器(可以位于另一个独立的服务器中,也可以位于 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,则只需花费不到 5 分钟的时间即可配置好 VPN。
在执行下一步之前,建议您设置防火墙规则以防止潜在的攻击。(通过使用 IPTABLES 或其包装器 FirewallD)
虽然我们将PHP-FPM做为Nginx专用,但是网站的PHP文件无法同时通过TCP端口和Unix Socket传递。
因此,您必须管理 Web 服务器的根文件夹。
管理网站文件夹的选项
将您的网站上传到具有相同文件夹路径的 Nginx 服务器和 PHP-FPM 服务器
编写脚本将文件同步到所有服务器
将 GIT 用于所有服务器。
在 Nginx 或其他专用服务器上创建 NFS(网络文件系统)
如果你使用的是 *nix 系统,我建议你采用第四种方法,因为,
首先,在一台服务器中管理所有网站文件
二、非常容易维护
三、几分钟内备份(这个应该是另一个问题)
※ NFS 服务器作为您网站的纯存储服务器
有些人可能会认为使用 NFS 会导致网络延迟,然而,对于有多个网站等待管理的情况,NFS 是一种高效且简单的方式。
你可以通过 GOOGLE “Linux 上的 NFS” 来完成安装和配置此步骤,较新版本大约需要 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 --no-check-certificatehttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(日期 +%s) -O 服务器.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开始编译!