为什么升级到 Ubuntu 14.04 后我的 Apache 无法工作?

Ama*_*ngh 36 apache2 14.04

[aman@aman-Inspiron-1440:~$ apache2
[Mon Apr 21 17:36:38.019213 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Mon Apr 21 17:36:38.019345 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Mon Apr 21 17:36:38.019370 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Mon Apr 21 17:36:38.019385 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Mon Apr 21 17:36:38.019414 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.028756 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029032 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029056 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
Run Code Online (Sandbox Code Playgroud)

/etc/apache2/apache2.conf文件的内容。

lan*_*ane 50

即使 apache 为我工作,我也遇到了这个问题。我只是想做一个快速的

$ /usr/sbin/apache2 -V
Run Code Online (Sandbox Code Playgroud)

找到 的值SERVER_CONFIG_FILE。因为这不再是启动 apache2 的方法,所以它会因 OP 发布的错误而失败。一个快速而肮脏的解决方法是简单地设置首先缺少的 envvars:

$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V
Run Code Online (Sandbox Code Playgroud)

这将设置 APACHE_LOCK_DIR 变量并且一切正常 ( -D SERVER_CONFIG_FILE="apache2.conf")。

  • 一个更简单的选择:`apache2ctl -V` (4认同)

小智 32

我遇到了这个问题:原因在文件中

/etc/apache2/sites-available/000-default.conf 
Run Code Online (Sandbox Code Playgroud)

根已经改变的地方:

升级前 =/var/www
升级后 =/var/www/html

所以编辑修改这个文件

sudo gedit /etc/apache2/sites-available/000-default.conf
Run Code Online (Sandbox Code Playgroud)

并重启apache

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

  • 这不可能是答案!上面的错误与 `DocumentRoot` 设置无关。 (4认同)
  • +1 我也想不通。你就是那个人! (2认同)
  • 就我而言,我仍然遇到这个问题,并且 `html` 子文件夹已经存在,在我的情况下,这实际上无关紧要,因为我的所有站点都使用 VirtualHosts (2认同)

aug*_*tin 14

症状及解决方法

在许多问答网站或论坛中,人们混淆了症状和实际原因。我刚刚将 ubuntu 服务器从 13.10 升级到 14.04.1,并遇到了 OP 描述的完全相同的症状,包括:
1- apache 显然无法正常工作。2- apache 配置变量未定义。3- OP 提到的语法错误。

问题是,并非所有这些症状实际上都与实际问题密切相关,它们只会分散那些尽力提供帮助的人的注意力。

不同的根问题可能会导致管理员访问这样的站点,描述大致相同:“我升级了操作系统,现在 apache 无法正常工作......”

一个具体原因

具有与 OP 完全相同的明显症状,我被这个问题所吸引。不幸的是,唯一包含对我的问题的真正根本原因的有效提示的答案被否决(-1),由 user1469291 发布,代表为 1!因此,我进一步搜索了其他网站,直到找到对问题(以及解决方案)的清晰解释。

下面的解决方案可能无法解决 OP 的真正问题,但我相信它会帮助其他可能因与我相同的原因而被这个问题所吸引的人。

/etc/apache2/apache2.conf 包含:

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
Run Code Online (Sandbox Code Playgroud)

这意味着只有以 .conf 结尾的 /etc/apache2/sites-enabled/ 中的站点配置文件才会被加载。该目录中较旧的符号链接将被忽略。

它曾经只是启用站点的/*。这就是为什么我简单命名为 ww1.example.com、ww2.example.com 等的所有虚拟主机配置文件曾经可以工作,但在升级后突然且最初莫名其妙地停止工作。

因此,要么更改上面的指令并重新加载 apache,要么像我一样手动删除 sites-enabled/ 中的所有旧符号链接,重命名 sites-available/ 中的所有文件以添加后缀 .conf,然后重新启用每个网站单独。

此外,apache.conf 中的默认指令更严格:

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

因此,如果您在 /home/user/somewhere 中托管您的虚拟站点,请确保适当地覆盖该指令。


Dan*_*Dan 6

仔细查看您的问题,您只是在运行apache2. 要在 Ubuntu 中启动 apache,请运行以下命令:

sudo apache2ctl start
Run Code Online (Sandbox Code Playgroud)

Apache 配置被分成多个文件,其中一个文件是环境变量。当您只运行 时apache2,不会设置这些变量。

apache2ctl 脚本将在使用apache2 -k start.