所以,今天我将一堆 Web 服务器从 12.04.2 更新到 12.04.3,你猜怎么着,更新后没有一个 vhost 可以工作。
主要原因是:
在 apache2.conf 中,该行
IncludeOptional sites-enabled/*
被替换为
IncludeOptional sites-enabled/*.conf
好的,没什么大不了的。我们启用站点的目录中的所有符号链接都缺少 .conf 扩展名,因此这些文件不会包含在配置中。
然而,Apache 处理访问控制的方式在各个版本之间也发生了变化。根据http://httpd.apache.org/docs/2.4/upgrading.html#access我必须改变
Order allow,deny
Allow from all
在 vhost 配置中
Require all granted
或包含该mod_access_compat
模块。
现在,我的问题是……我一直觉得 LTS 版本应该可以更新而不会破坏任何东西。我的意思是能够在
sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
不破坏任何东西的情况下运行。这个假设错了吗?如果错了,我在哪里以及如何提前知道下次会发生什么?我的意思是,我如何知道更新后我必须修改我的 apache / php / 任何配置?
答案1
您确定 Apache 2.4 是从 Ubuntu 的规范存储库之一安装的吗?您是否使用了任何 PPA?
第三方 PPA 为 PHP 5.4 将 Apache 2.2 升级到了 2.4。后来它被改为 PHP 5.5,并且 Apache 2.4 被添加到 PPA 中。当我遇到与您相同的问题时,一个新的 Vagrant 在破坏后启动时崩溃了,并且 vhost 配置与 Apache 2.4 不兼容。
“apt-cache policy apache2” 的输出是什么样的?我刚刚创建了一个新的空白 Vagrant 实例并执行了sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
。这是我的输出:
t# apt-cache 策略 apache2 阿帕奇2: 已安装:(无) 候选版本:2.2.22-1ubuntu1.4 版本表: 2.2.22-1ubuntu1.4 0 500 http://us.archive.ubuntu.com/ubuntu/precise-updates/main amd64 软件包 500 http://security.ubuntu.com/ubuntu/precise-security/main amd64 软件包 2.2.22-1ubuntu1 0 500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 软件包
我怀疑你会看到 Apache 2.4 来自第三方存储库,而不是 12.04 的规范存储库。
答案2
我也可以确认这个问题。11 月 27 日,我使用 Webmin 进行了所有 Ubuntu 更新。vhosts 坏了,但现在可以通过添加 .conf 扩展轻松修复。添加
<Directory />
Options All
AllowOverride All
Require all granted
</Directory>
我的 vhost 文件就成功了。
同样,在我的案例中,根据我的 Drupal 状态报告,uploadprogess PHP 扩展也损坏了。最终有效的解决方案是使用 PECL 卸载并重新安装。Apache 更新显然将 .so 文件移到了另一个目录中,重新安装后将其放回了正确的位置。
至于第三方存储库是 2.4 的来源,唯一添加的是 2 个用于 Webmin 的存储库。我以前从未担心过系统更新,但现在我想我必须担心了 :( 我认为 Ubuntu 搞砸了。