升级到 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;
}
我 运行 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;
}