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

after upgrade to php8.0, nginx still uses php7.2 for PHP-FPM

我 运行 Ubuntu 18.04 nginx/1.14.0。我一直是 运行 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 配置文件。这是我试图找到它时得到的结果:

# 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 的配置文件,我会告诉它使用 PHP-FPM 8.0。

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

您需要更新相关的 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,Nginx应该使用哪个版本:

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;
  }