如何在 Ubuntu 上使用 nginx 安装 php 7 以与 php 5 一起运行

如何在 Ubuntu 上使用 nginx 安装 php 7 以与 php 5 一起运行

我想尝试 php 7,并让我的网站在 php 7 上运行,同时让其他网站在 php 5 上运行,以防万一。这样我就可以从域虚拟主机配置中决定运行哪个 php。

我查看了 php 版本管理,发现可以运行两个版本,但我找到的版本似乎适用于 apache。我正在寻找有关如何在 nginx 下执行此操作的更清晰的说明。我还运行了 hhvm,以防万一。

答案1

首先,你需要安装php5-fpmphp7.0-fpmOndřej Surý 的 PPA 用于可同时安装的 php5 和 php7.0。

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

然后,我们nginx建议使用 FPM 包。因此,请相应地安装包:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

来源:关于“如何安装 php 7?”问题的回答,以及我自己的自定义评论和修改。


其次,nginx. nginx只能与您的配置一样好。您的 nginx 服务器块上很可能有一个类似于此的 PHP 处理块(来自“默认”示例配置):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

此配置将仅传递给php5-fpm。实际上,这将适用于您的整个服务器块。最简单的方法是使用第二个服务器块(例如test.domain.tld),并提供 PHP 7.0fastcgi_pass目标。在 Xenial 上的 php7.0 中,最终结果将是这样的(从最近上传到 Xenial nginx 包的修复中提取),但是我不知道 Ondrej 包的布局,所以我无法在那里提供确切的细节(检查/etc/php7.0/fpm/pool.d/www.conf或类似内容以确定它正在监听的位置):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

您必须对您的php5块做类似的事情,以验证php5.6使用套接字而不是内置套接字php5(我们刚刚删除)。

然后,使用第二个测试域运行php7.0测试。但是,如果您想这样做,请确保复制您的网站 - 可能需要有单独的测试副本,以便您完成使用后php7.0,您可以毫无问题地“切换”。

不幸的是,没有简单的方法可以在同一个服务器块内制作php5php7.0工作,除非改变你的网站、应用程序等的路径,以便有一个用于php5,一个用于php7.0;这样的网站返工可能会变得很糟糕,因此建议运行两个单独的网站代码副本,一个用于php7.0迁移,一个用于php5生产。

相关内容