Apache2 似乎无法启动

Apache2 似乎无法启动

抱歉,但我对系统管理员的东西还不熟悉,对 Linux 也真的是新手(大菜鸟),所以我向你们求助,因为我不知道是什么原因造成的(正如我已经说过的,我对 Linux 真的是新手)。我在尝试安装 GUI 时意外地用 taskel 删除了一些东西(我真幸运……),然后重新安装了其中一些(至少是我记得的那些)。我现在遇到的情况是 apache2 无法启动:

无法启动

/etc/apache2/apache2.conf 第 146 行的语法错误如下

这

/etc/apache2/mods-enabled/php7.1.load 中的第三个错误如下

这 确实,/usr/lib/apache2/modules/ 中没有“libphp7.1”这样的文件,只有“libphp8.1”(抱歉,这里的屏幕截图是新的)有人能告诉我现在该怎么办吗?将配置文件从 7.1 更改为 8.1 还是只安装 7.1?

答案1

最有可能的是,您的系统中的 php 版本发生了变化(适用于 Debian/Ubuntu 及其衍生产品,在其他发行版中某些路径可能会有所不同),但在您的 Apache 配置中没有改变,请运行:

php -v 

通过运行以下命令来验证正在加载的版本:

ls -l /etc/apache2/mods-enabled/php*

那么如果你的版本与 Apache 加载的版本不同,假设结果是

lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.conf -> ../mods-available/php7.4.conf
lrwxrwxrwx 1 root root 29 ago 17 12:19 php7.4.load -> ../mods-available/php7.4.load

并且您的新版本现在是 8.1,请检查可以运行哪些模块:

ls -l /etc/apache2/mods-available/

-rw-r--r-- 1 root root  855 jun 13 08:43 php7.4.conf
-rw-r--r-- 1 root root  102 jun 13 08:43 php7.4.load
-rw-r--r-- 1 root root  855 ago 15 07:24 php8.1.conf
-rw-r--r-- 1 root root  101 ago 15 07:24 php8.1.load

在列表中显示旧的(不工作)和新的 php8.1,运行以下命令为这些新版本模块创建新的符号链接

sudo ln -s /etc/apache2/mods-available/php8.1.conf  /etc/apache2/mods-enabled/php8.1.conf
sudo ln -s /etc/apache2/mods-available/php8.1.load  /etc/apache2/mods-enabled/php8.1.load

删除旧的符号链接

sudo rm /etc/apache2/mods-enabled/php7.4.*

并重新启动 Apache

sudo service apache2 restart

答案2

libphp-7.1.so您的系统上可能缺少此文件,或者该文件位于某个未配置的位置,Apache 无法找到它。很可能在某个升级过程中删除了它,但很难说。

您会发现在 Linux 服务器上维护 PHP 是一件麻烦事。尤其是在像 Ubuntu LTS(可能是也可能不是您的发行版,这只是我的观点)这样的系统上,您可以获得 LTS 的稳定性,但随后陷入困境,迫使您落后于其他软件的新版本数月甚至数年,而这些软件依赖于“软件包 X”的新功能才能正常工作。下面是我在 Ubuntu 上处理这个问题的方法。如果您运行 Redhat、Slack、SuSE 或 Yggdrasil Linux,这将不会有太大帮助。

您不能只安装较新版本的 PHP,否则在某个时候会遇到操作系统软件的依赖问题。有时这些依赖项可能会与 MySQL/MariaDB 功能发生冲突,最终可能会出现非常复杂的红色药丸类型的问题。正如上面有人评论的那样,有时与标准操作系统捆绑在一起的 PHP 版本已经过时,无法使用(截至 2022 年 3 月 29 日,低于 PHP 8.0 的任何版本肯定都是这种情况,7.4 肯定是不可靠的)。新管理员也感到困惑,因为“为什么你的操作系统会提供如此过时的软件?”,对吧?Ubuntu 显然确实将安全问题移植到了 LTS 版本,但需要进行大量挖掘才能核实给定的 CVE 实际上已在 LTS 软件包中进行了修补。有时修复程序可用且已在给定软件包的 tarball/git repo 中实现,但修补程序/反向移植仍在等待 Ubuntu 维护者将其实际转入 deb 软件包,以便您可以安装它。从安全角度来看,带外安装没有 repo 的软件是危险的,因为这样您就依赖手动过程来记住升级该 OOB 软件包,而这实际上从未奏效。管理员离开,人们忘记了。

幸运的是,来自捷克共和国的 Debian 维护者 Ondřej Surý(实际上更像是一名巫师)主动发布了一个 repo,其中包含了在 Debian/Ubuntu 系统上升级 PHP 的所有基础内容。您可以配置这奇妙的回购并升级 PHP,同时仍保持其可维护性。作为奖励,您可以升级NginX阿帕奇通过他的 repo 也可以,因为一些较新的 PHP 功能需要更改这些包。您可能可以在上面的某个链接中找到一些更好的说明,但有少数网站可以指导你以及任何需要的 Nginx 或 Apache 堆栈更改。

需要注意的是,在安装 Ondřej Surý repo 之前,请获取全部当前安装的 PHP/NginX/Apache 软件包(例如:(dpkg -l | egrep -i '(apache|nginx|php)'或类似的apt aptitude apt-get)。这些软件包的名称有时会发生变化,依赖项有时会引入 PHP 软件包的混合版本。例如,字符串几个 PHP 版本之前的一个软件包。它需要一些人工干预

当然,所有这些问题有时都可以通过操作系统升级来避免(例如:“Crazy Camel” -> “Damaged Dingo”),但即便如此,最新的 LTS 版本可能缺少某些第三方堆栈所需的前沿功能,而您仍然处于同样的境地。

无论如何,祝你好运,并且在做任何事情之前不要忘记对你的虚拟机进行快照!

相关内容