问题描述
[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/*