use*_*341 3 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 。
编辑:我的问题基本上分为三个部分:
如果答案可以提供让我自己摆脱困境的步骤,同时还启用 PHP8.1-fpm,那就太棒了。
哦,这样就很清楚了;我当前的设置是:
小智 5
我认为你的第三个问题回答第二,将它们组合成一个命令列表
为什么我的网站在禁用 PHP8.1 模块后就离线了?
当您关闭 apache php 模块时,Web 服务器会将 php 代码视为纯文本,这是未知内容类型的默认行为。它有点工作,但你的代码根本没有被解释。
而且,我该如何防止这种情况再次发生?
为了防止使用varnish、负载均衡器(apache / nginx),在系统稳定时制作系统快照或使用 docker 将应用程序容器化。无论什么都适合您的需求。
在清漆的情况下,它将创建网页的缓存版本,并返回它们作为响应,忽略您的网络服务器,直到不存在这样的网页缓存版本(换句话说,没有缓存命中)。但在此之前,您需要编写将缓存所有页面的脚本。然后 Varnish 将简单地发送 html 响应。
在负载均衡器的情况下,如果一个节点发生故障,那么它将把流量重定向到另一个活动节点。每个节点基本上都是您网站的副本。
例如,快照是操作系统的映像,可以在不同的虚拟机中使用。因此,如果你搞砸了,那么你可以简单地删除快照并再次安装初始快照。
在 docker 中,你可以简单地将你的应用程序分成 2 个服务,你可以根据需要配置它们,而不必担心让一切变得糟糕)
1 服务将 apache2
2 服务将是 php-fpm
然后,您可以简单地将每个服务构建为映像并像在 VM(虚拟机)中一样旋转映像。
如何升级到 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
希望此列表中的内容会对您有所帮助)
| 归档时间: | 
 | 
| 查看次数: | 11635 次 | 
| 最近记录: |