Nginx和不同版本的PHP FPM + PHP

由于马克和他之前的回答更好地理解了我想实现的目标,所以我发布了一个(希望的)更清晰和略微不同的前一个问题的变体,因为这个线程已经达到饱和;

我试图在一个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个Nginx服务器(前端,处理静态文件)

2个PHP-FPM服务器(后端,处理PHP脚本)

1个数据库服务器(可以在另外一台服务器或Nginx服务器上运行)

Nginx服务器可以通过公网私网访问

PHP-FPM服务器和DB服务器只能通过Nginx服务器( 专用networking )访问

公共networking ,这意味着可以由有互联网的人访问。

专用networking ,可以在特定的networking组中看到。 (A类,B类,C类,例如192.xx.xx.xx或10.xx.xx.xx或172.xxx.xxx.xxx)

如果您在Linode和DigitalOcean上使用VPS,它们都提供专用networkingIP,您可以按照他们给出的指示进行设置。

如果没有,你可以build立自己的VPN(虚拟专用networking)或使用你的路由器来build立一个,这很容易,你可以GOOGLE所有你需要的。

如果您使用的是Ubuntu,使用configurationVPN只花费不到5分钟。

在下一步之前,build议您设置防火墙规则以防止潜在的攻击。 (通过使用IPTABLES或其包装,FirewallD)

虽然我们把PHP-FPM作为Nginx专用,但是网站的PHP文件不能同时通过TCP端口和Unix Socket。

因此,您必须pipe理Web服务器的根文件夹。

pipe理网站文件夹的选项

  1. 使用SAME文件夹PATH将您的网站上传到Nginx服务器和PHP-FPM服务器

  2. 写一个脚本来同步文件到你的所有服务器

  3. 将GIT用于所有服务器。

  4. 在Nginx或其他专用服务器上创buildNFS(networking文件系统)

如果您使用的是* nix系统,我build议您select第四个选项,

首先,在一台服务器上pipe理所有的网站文件

其次,很容易维护

第三,在几分钟内备份(这应该是另一个问题)

※NFS服务器作为您的网站的纯粹的存储服务器

有些人可能会考虑使用NFS导致networking延迟,但是,对于多个等待pipe理的网站,NFS是一种高效和简单的方法。

你可以GOOGLE“Linux上的NFS”完成安装和configuration这一步,花费你约1小时的新。

但是,请注意,NFS服务器也应该位于专用networking中。

当NFS,PHP-FPM和Nginx都在同一个专用networking中时 ,networking延迟应该更小。

然后让我们configurationnginx.conf

假设

你的Nginx的公网IP是202.123.abc.abc,听80(或443如果SSL启用)

您的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; 

上面的行应放在最后}

然后,在nginx.conf文件夹中创build一个名为vhosts的文件夹

假设

你有另一个应用程序正在使用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证书。

重新启动您的服务器,并享受!

EDITED

要安装不同版本的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

在第一个屏幕中select1

在第二个屏幕(LNMP)中select1

询问你要安装哪个版本的nginx时select1(do_not_install)

询问你要安装哪个版本的mysql时select1(do_not_install)

当问你想要安装哪个版本的PHP时,select你想要的版本

保留所有设置为默认值(使您将来可以轻松pipe理PHP-FPM)

select你想要的额外的扩展,当然你可以忽略所有的常见的扩展将被安装在以后。

让这个shell开始编译!