升级到Ubuntu 22.04 LTS后,Apache2无法启动 - 无法加载/usr/lib/apache2/modules/libphp8.0.so

19

我有点不知道该如何解决这个问题。 我升级了运行Apache2的服务器的发行版。

自从升级后,它就无法工作了。 我运行了配置测试,下面是错误。 在之前的Ubuntu版本(21.10)上,我的配置没有任何问题。

$ apache2ctl configtest
apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php8.0.load: Cannot load /usr/lib/apache2/modules/libphp8.0.so into server: /usr/lib/apache2/modules/libphp8.0.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.

有什么想法从哪里开始吗?当涉及到Apache时,我还是相对缺乏经验。


你在升级后运行了sudo“apt-get update && sudo apt-get upgrade”吗? - Will
我确实做了。谢谢你。不确定为什么模块配置没有自动更新。相当确定它通常会自动更新,对吧? - RichardODonoghue
不是所有的时间都启用,有些取决于您如何升级。我们有很多PHP 5.3的东西,所以我们将其禁用以便我们可以继续运行。但有些软件包不支持它或者不会兼容。不幸的是,这有点像迷宫,但最简单的方法是检查已更新的内容。 - Will
6个回答

28

当你找到这个答案的时候,其他人(比如我自己)会来看看你是如何做到这一点的。


# perhaps you did the following to see what modules were present
> apache2ctl -M

# the result of the above command may have returned an error such as:
apache2:
 Syntax error on line 146 of /etc/apache2/apache2.conf:
  Syntax error on line 2 of /etc/apache2/mods-enabled/php8.0.load:
   Cannot load /usr/lib/apache2/modules/libphp8.0.so into server:
    /usr/lib/apache2/modules/libphp8.0.so:
     cannot open shared object file: No such file or directory
Action '-M' failed.

# so you removed the problematic module that was no longer installed
# by doing the following (as appropriate given the error above)
> sudo a2dismod php8.0

# you needed to restart your server after that
> sudo systemctl restart apache2

# if you tested the server in a browser html should function...
# however you perhaps desired the use of another php module
# and added another one (8.1) that is install by default in Ubuntu 22.04
> sudo a2enmod php8.1

# you restarted apache again and it worked?
> sudo systemctl restart apache2

也许您正在使用mod_userdir,并且还需要更新apache php模块配置文件:

/etc/apache2/mods-enabled/php8.1.conf

通过注释以下行来实现:

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

所以它们看起来像这样:

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>
# finally you restarted apache2 again:
sudo systemctl restart apache2
# and everything was back to normal?

你做过类似这样的事情吗?


2
感谢您提供详细的答案。我已经很久没有接触Apache了,这让我能够立刻重新开始工作。 - CodeCrafterTroy
非常感谢!!!从21.10升级到22.04后,我遇到了与OP相同的问题。你的帮助太棒了!!!! - Arsenii

16

在我的情况下,我将Ubuntu 20.04升级到了22.04。因此,向导卸载了php7.4模块,并安装了php8.1模块。之后,我尝试重新启动apache2,但无法启动。我意识到在我的/etc/apache2/mods-enabled文件夹中,我仍然有php7.4.conf和php7.4.load,并且php7.4.load仍然指向libphp7.4.so。

请记住,mods-enabled文件夹是由mods-available文件夹生成的,因此您不应更改mods-enabled文件夹。相反,您应禁用php7.4模块:

sudo a2dismod php7.4

并启用php8.1模块:

sudo a2enmod php8.1

当然,在启用php8.1模块后,您必须重新启动apache2服务。

sudo systemctl restart apache2

这也是我的情况。感谢提到 a2dismoda2enmod - Yousef Altaf

6

不要理会别人。我已经弄清楚了。

我检查了 /usr/lib/apache2/modules/ 目录并发现 libphp8.0.so 已经被更新为 libphp8.1.so。

在修改 mods-enabled 以包含这个文件而不是有问题的那个文件后,Apache 顺利启动了。


2
欢迎来到stackoverflow!感谢您的提问 - 我曾经也遇到过同样的问题。 - Cyrille

3

升级到 Ubuntu 22 的操作系统会将安装的 php 7.x 更新为 php8.x,但它不会修复 Apache2 配置。

使用以下命令:

sudo a2dismod php7.4

sudo a2enmod php8.1

sudo a2disconf php7.4-fpm

sudo a2enconf php8.1-fpm

sudo systemctl reload apache2


2
sudo gedit /etc/apache2/mods-enabled/php8.0.load

并重命名:

LoadModule php_module /usr/lib/apache2/modules/libphp8.0.so

to:

LoadModule php_module /usr/lib/apache2/modules/libphp8.1.so

1

我卸载了 PHP 和 Apache2 并重新安装。这比盲目尝试并查看数百个论坛消息和系统错误消息要容易。

现在它可以正常工作了。在 7.4 和 8.1 之间有很多变化,导致我的大部分网页都无法正常显示,我必须进行调试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接