如何使用nginx在Ubuntu上安装PHP 7以在PHP 5旁边运行


9

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

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

Answers:


11

首先,您需要安装php5-fpmphp7.0-fpm的OndrejSurý的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?”的答案。问题,以及来自我自己的自定义评论和修改。


其次,nginxnginx只能与您的配置一样好。您很可能在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.0 fastcgi_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生产。


如果选择这种方式,则应坚持使用*php5.6*Ondřej提供的软件包,并删除普通php5软件包。
muru

@muru可能是正确的,我会写在
Thomas Ward

谢谢!这比我预期的要好。一开始梨和CLI出现了问题,但事实证明这是我需要更新的存储库中的一个错误,并且可以正常工作。我的网站在php7上运行非常快。太奇妙了。
可怕的分号

fpm袜子的名称也为5.6。
toster-cx

截至2018年,NGINX的php5.6配置为fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.