升级到php8.0后,nginx仍然使用php7.2进行PHP-FPM

Posted

技术标签:

【中文标题】升级到php8.0后,nginx仍然使用php7.2进行PHP-FPM【英文标题】:after upgrade to php8.0, nginx still uses php7.2 for PHP-FPM 【发布时间】:2021-05-24 05:54:57 【问题描述】:

我正在使用 nginx/1.14.0 运行 Ubuntu 18.04。我一直在运行 php 7.2,但出于安全原因,我的一些 Web 应用程序需要更新的 php。

由于是nginx,所以我使用PHP-FPM。

我用apt升级到最新版本的PHP。

# /usr/bin/php -v
PHP 8.0.2 (cli) (built: Feb 14 2021 14:21:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.2, Copyright (c), by Zend Technologies

所以看起来是对的。但是应用程序仍然抱怨 PHP-FPM 7.2 并且 phpinfo 确认:

PHP Version 7.2.34-13+ubuntu18.04.1+deb.sury.org+1

所以听起来我应该更改 PHP conf 文件。这是我尝试找到它时得到的结果:

# locate php.conf | more
/etc/nginx/snippets/fastcgi-php.conf

好的。于是我求php.ini:

# locate php.ini | more
/etc/php/7.2/cli/php.ini
/etc/php/7.2/fpm/php.ini
/etc/php/7.2/fpm/php.ini.orig
/etc/php/7.2/fpm/php.ini.ucf-dist
/etc/php/8.0/apache2/php.ini
/etc/php/8.0/cli/php.ini
/etc/php/8.0/fpm/php.ini
/usr/lib/php/7.2/php.ini-development
/usr/lib/php/7.2/php.ini-production
/usr/lib/php/7.2/php.ini-production.cli
/usr/lib/php/8.0/php.ini-development
/usr/lib/php/8.0/php.ini-production
/usr/lib/php/8.0/php.ini-production.cli

我没有看到可以选择 NGINX 或 PHP 的 conf 文件,我会告诉它使用 PHP-FPM 8.0。

如何让 NGINX/PHP 使用我服务器上的新版本 PHP 而不是旧版本?

【问题讨论】:

【参考方案1】:

在每个服务器中,你可以定义Nginx应该使用哪个版本的PHP:

location ~ \.php$ 
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/run/php/php7.4-fpm.sock;
  

或:

location ~ \.php$ 
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/run/php/php8.0-fpm.sock;
  

【讨论】:

也许你也想看看这个链接。 ***.com/questions/42619312/… 谢谢。这行得通。我进入/etc/nginx/sites-available/* 文件并更改了每个规定fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; 的实例并将其替换为fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;。并重启了nginx服务。现在 phpinfo() 报告 php 8.0 并且我想要 PHP-FPM 8.0 的应用程序很高兴。再次感谢! @PHPdabbler 不客气,但我建议在 /etc/nginx/conf.d/nuxt.info.conf 中创建一个文件(nuxt.info 是我的网站,你为您的网站),然后将与您的网站相关的所有代码放入其中,例如laravel.com/docs/8.x/deployment#nginx Nginx 将读取 'conf.d' 文件夹中所有带有 .conf 后缀的文件【参考方案2】:

您需要更新相关的 PHP 包。您更新了cli 包,但这还不够。

检查为 7.2 安装了哪些软件包:

dpkg --get-selections | grep -v deinst | grep php | grep 7.2

如果你找到php7.2-foo,请尝试安装php8.0-foo。然后尝试删除 7.2 版本。

请务必事先运行apt-get update

一些软件包(我认为一个是xdebug,也许是redis?)具有奇怪的依赖关系,因为安装 8.0 会(重新)安装 7.2。没关系。但是您可能只需要 FPM 那些,它们应该是没有问题的。

【讨论】:

感谢您的建议。我选择先尝试另一个答案,因为它看起来更容易且风险更小。 没关系。但是“风险”确实可以忽略不计,您目前可能只有两个单独的 PHP-FPM 安装和一个 PHP-CLI 安装(上面的命令会告诉您是否是这种情况)。在最坏的情况下,您会获得一些额外的磁盘空间用于您没有真正使用的模块 - 另一方面,这就是您现在所处的情况:-) 我忘了! - 以上所有内容均成立,除非需要安装两个不同版本的 PHP,这常见要求(例如,如果您需要维护旧的 PHP 代码库和最近的代码库)。在这种情况下,我的解决方案毫无价值而且实际上具有破坏性,因为它会禁用旧的 PHP;你需要调整 Nginx conf 文件(@SamRaskul 的回答)。

以上是关于升级到php8.0后,nginx仍然使用php7.2进行PHP-FPM的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Passport 得到“无法解析您的密钥,原因:升级到 PHP8.0 后出现“”错误

升级到 PHP7.1 和 MPDF 显示错误 - 在第 30648 行遇到非数字值

xdebug3+php8.0+vscode断点调试php程序

centos7 Nginx1.14+php7+mysql5.7 以及 centos7 Apache2.4+PHP7+mysql 安装 Linux 配置 composer 以及Python2.7升级到

[Linux] PHP程序员玩转Linux系列-升级PHP到PHP7

Deepin20 安装 PHP8等环境