当前位置: 首页>>技术问答>>正文


升级到Ubuntu 14.04后,为什么我的Apache无法运行?

, ,

问题描述

[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}

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

最佳解决方案

我有这个问题:原因在文件中

/etc/apache2/sites-available/000-default.conf 

根发生了变化:

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

所以编辑修改这个文件

sudo gedit /etc/apache2/sites-available/000-default.conf

然后重启apache

sudo service apache2 restart

次佳解决方案

即使apache正在为我工​​作,我也遇到了这个问题。我只是想快点做

$ /usr/sbin/apache2 -V

找到SERVER_CONFIG_FILE的值。因为这不是启动apache2的方法,它失败了OP发布的错误。快速而肮脏的解决方法只是设置首先缺少的envvars:

$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V

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

第三种解决方案

症状和解决方案

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

问题在于,并非所有这些症状都与实际问题密切相关,而且只会让那些尽力帮助的人分心。

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

一个具体原因

具有与OP完全相同的明显症状,我被这个问题所吸引。不幸的是,唯一包含对我的问题的真正根本原因的有效提示的答案是downvoted(-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

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

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

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

另外,apache.conf中的default指令更严格:

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

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

第四种方案

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

sudo apache2ctl start

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

在使用apache2 -k start启动apache之前,apache2ctl脚本将加载变量(并在需要时执行其他一些操作)。

第五种方案

编辑配置:sudo leafpad /etc/apache2/apache2.conf

# Include the virtual host configurations:

#before upgrade = 
IncludeOptional sites-enabled/*
#after upgrade = 
/IncludeOptional sites-enabled/*.conf

或删除文件。

第六种方案

服务器从12.04 LTS升级到14.04 LTS后,当我的所有虚拟主机都消失时,augustin的answer为我工作。如果我有这样的声誉,我会赞成它。

以下命令将.conf后缀添加到/etc/apache2/sites-enabled中尚未包含它的所有符号链接:

sudo find /etc/apache2/sites-enabled -type l ! -name '*.conf' -exec rename 's/$/.conf/' {} \;

此外,在mod_authz_host模块中使用Allow from /Deny from语法更改为Require(here是2.2文档的链接)。

以下命令将编辑Order allow, deny的常用用法,然后将Allow from all编辑为Require all granted

perl -0777 -pi.bak -e 's/Order\s+allow\s*,\s*deny\s*\n\s*Allow\s+from\s+all/Require all granted/sg' /etc/apache2/sites-available/* 

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1977.html,未经允许,请勿转载。