php - Debian 上的 Apache - 升级到 PHP8.1 - phpinfo() 不显示新版本并与 mpm 冲突

标签 php apache debian sudo

我正在尝试更新我的服务器以使用 PHP8.1,但我最终禁用了 http/2,也无法弄清楚如何重新启用它并真正让 PHP8.1 运行。

我做的第一步是:

sudo a2dismod php7.4
sudo a2enmod php8.1

第二个命令与 mpm_event 有冲突,所以我运行:

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork

再次运行“sudo a2enmod php8.1”和“sudo systemctl restart apache2”后,似乎没问题。

但是,每当我运行“php -v”时,它都会说 CLI 是“8.1”,但在实时站点上使用“phpinfo()”仍会返回“7.4.26”。

我还运行了这些命令,它们都显示 8.1 当前正在运行:

sudo update-alternatives --config php
sudo update-alternatives --config phar
sudo update-alternatives --config phar.phar
sudo update-alternatives --config phpize
sudo update-alternatives --config php-config

所有这一切之后,我注意到我的网页停止通过 http/2 提供服务。在尝试“sudo a2dismod mpm_prefork”以便我可以再次启用 mpm_event 时,它说它无法禁用 mpm_prefork,因为与 PHP 模块存在冲突。当我禁用 PHP 模块时,我可以禁用 mpm_prefork 并启用 mpm_event 但那样我就不会再有 PHP 了(我想?这一切都太令人困惑了......)

编辑:我尝试禁用 PHP 模块并启用 mpm_event,但这使网站不再工作,所以我恢复了这些更改。

为清楚起见,当我尝试“sudo a2dismod mpm_prefork”时,出现此错误:

ERROR: The following modules depend on mpm_prefork and need to be disabled first: php8.1

如果有帮助,phpinfo() 会提示我当前正在运行:

PHP Version 7.4.26
Server API  FPM/FastCGI
Configuration File (php.ini) Path   /etc/php/7.4/fpm

此外,我的 mods_enabled 文件夹中现在有 PHP8.1,我发誓在此之前根本没有 PHP 模块。

总而言之,我是服务器管理的新手,但我只是想在使用 http/2 时运行 PHP8.1(fpm 版本?),但我在原地转圈,我也后退了一步,不小心禁用了http/2.

编辑:我的问题基本上分为三个部分:

  1. 为什么在禁用 PHP8.1 模块后我的网站会离线?和, 我该如何防止这种情况再次发生?
  2. 如何安全地重新启用 mpm_event(以便 http/2 再次工作)?请记住,它似乎 仅当 PHP8.1 和 mpm_prefork 模块都可用时才是一个选项 禁用。
  3. 如何升级到 PHP 8.1-fpm?

如果答案可以提供将自己从我自己挖的坑中挖出来的步骤,同时还启用 PHP8.1-fpm,那就太棒了。

哦,很明显了;我当前的设置是:

  • 启用 PHP8.1 和 mpm_prefork 模块(禁用 mpm_event)
  • 现场网站使用的是没有 http/2 的 PHP7.4-fpm
  • PHP的CLI版本是PHP8.1
  • 我没有安装 PHP8.1-fpm

最佳答案

我认为你的第三个问题的答案是第二个,将它们组合成一个命令列表

Why did my site go offline after I disabled the PHP8.1 module?

当您关闭 apache php 模块时,网络服务器将 php 代码视为纯文本,这是未知内容类型的默认行为。它有点工作,但你的代码根本没有被解释。

And, how do I prevent that from happening again?

为了防止使用varnish , 负载均衡器( apache/nginx ), 制作 snapshots当系统稳定或使用 docker 容器化您的应用程序时。任何适合您需求的内容。

在清漆的情况下,它将创建您的网页的缓存版本,并将返回它们作为响应,忽略您的网络服务器,直到不存在这样的网页缓存版本(换句话说,没有缓存命中)。但在此之前,您需要编写脚本来缓存所有页面。然后清漆将简单地发送 html 响应。

在负载均衡器的情况下,如果一个节点发生故障,那么它会将流量重定向到另一个事件节点。每个节点基本上都是您网站的副本。

快照是您的操作系统的镜像,例如,您可以在不同的 VM 中使用它们。所以如果你搞砸了,那么你可以简单地删除快照并重新安装初始快照。

在 docker 中,你可以简单地将你的应用程序分成 2 个服务,你可以根据需要配置它们,而不用担心让一切变得糟糕)

1 个服务将 apache2

2 服务将是 php-fpm

然后您可以像在 VM(虚拟机)中一样简单地将每个服务构建为镜像并旋转镜像。

How do I upgrade to PHP 8.1-fpm?

# step 1, optional if you did it before
sudo apt update
sudo apt upgrade

# step 2, dont see any issues with simply installing newer version of php-fpm
sudo apt install php8.1-fpm

# check if user and group in php-fpm config are correct(/etc/php/8.1/fpm/pool.d/www.conf). 
# User and group should be the same as webserver user and group.
# if you want to check under which user webserver runs
# sudo ps aux| grep apache2 
listen.owner = www-data
listen.group = www-data
# and also check if socket/port for php-fpm are created/opened and its running normally

# step 3
# disable modules and restart configured services. For apache better to reload instead of restart
sudo a2dismod php8.1
sudo a2dismod mpm_prefork
sudo a2disconf php7.4-fpm
sudo a2enmod mpm_event
# optional in case its enabled
sudo a2enmod proxy
# optional in case its enabled
sudo a2enmod proxy_fcgi
sudo a2enconf php8.1-fpm
sudo systemctl restart php8.1-fpm
sudo systemctl restart apache2
# manually set php version for CLI
sudo update-alternatives --set php /usr/bin/php8.1
sudo update-alternatives --set phar /usr/bin/phar8.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.1

# step 4
# Mask the old PHP-FPM daemon (tell the system to not start the old php-fpm daemon)
sudo systemctl mask php7.4-fpm

希望此列表中的某些内容会有所帮助)

关于php - Debian 上的 Apache - 升级到 PHP8.1 - phpinfo() 不显示新版本并与 mpm 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70284446/

相关文章:

php - 我的广播电台网站的 JSON 代码?

pythonbrew 导入 bz2 产生 : ImportError: No module named '_bz2'

linux - 一步删除文件和符号链接(symbolic link)

php - 使用 mongoDB Jenssegers Laravel 运行原始查询

php - 向PHP数组添加多个变量

php - 如何在 MAMP 中设置环境变量?

printing - 在 Debian Wheezy 上设置 USB 串行收据打印机(epson tm-t88ii/iii 兼容)

php - 使用onClick函数更新数据库信息

php - twig - 在 for 循环中构建数组

git - 在 Windows 服务器上使用 Apache 配置 Git