Nginx 和 PHP FPM+PHP 的不同版本

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

根据我的经验,一个简单的服务器结构如下,这对于您的情况来说已经足够了。

假设

您大约有两个小时的时间进行设置。

服务器环境假设

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 服务器的根文件夹。

管理网站文件夹的选项

  1. 将您的网站上传到具有相同文件夹路径的 Nginx 服务器和 PHP-FPM 服务器

  2. 编写脚本将文件同步到所有服务器

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

  4. 在 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开始编译!

相关内容