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


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

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


3
它不起作用,因为/etc/apache2/apache2.conf的第74行出现语法错误。请上传该文件的内容,看看有什么问题。
Lucio

2
从昨天开始搜索Google,
Amandeep Singh 2014年

在以下位置上传了文件:pastebin.ubuntu.com/7298873
Amandeep Singh 2014年


我需要将/ var / www移至/ var / www / html吗?
Amandeep Singh 2014年

Answers:


31

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

/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

由于这是OP可能面临的问题,所以这不是他目前遇到的问题。无论哪种情况,如我在此答案中所述,我都不建议编辑000-default.conf文件。
2014年

移至/ var / www / html之后,其工作
原理

2
+1我也无法弄清楚。你是男人!
gion_13 2014年

2
就我而言,我仍然遇到这个问题,并且html子文件夹已经存在,因为我所有的站点都使用VirtualHosts
所以

4
这不可能是答案!上面的错误与DocumentRoot设置无关。
Reinier Post

50

即使apache为我工作,我仍然遇到这个问题。我只是想快速

$ /usr/sbin/apache2 -V

找到的值SERVER_CONFIG_FILE。因为这不再是启动apache2的方法,它会因OP张贴的错误而失败。一个快速而肮脏的解决方法只是设置首先丢失的envvar:

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

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


1
这对我有用。同样的问题,Apache正在运行并且正在运行,但是运行apache2 -S失败。全部固定。
Twisty

奇怪。这似乎对我不起作用。关于为什么应该这样做是有道理的。
泰勒·克伦普顿

@TylerCrompton-它是怎么失败的?这是什么错误?
车道

没什么区别。我仍然遇到OP遇到的问题。apache2以root身份运行虽然可以解决问题。
泰勒·克伦普顿

4
一个更简单的选择:apache2ctl -V
Reinier

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

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

它曾经只是启用了站点/ *。这就是为什么我所有我简单命名为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>

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


1
这是一个很好的答案。最好在匆匆忙忙抱怨事情不正确之前先了解这些变化。
MikeNGarrett 2014年

1
为此,我没有意识到重命名文件并没有从启用站点的站点中删除符号链接。
本诺2015年

这没有提供解决方案。
Reinier Post

6

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

sudo apache2ctl start

Apache配置分为多个文件,这些文件之一是环境变量。当您仅运行时apache2,未设置这些变量。

apache2ctl脚本会先加载变量(并在需要时执行一些其他操作),然后再使用来启动apache apache2 -k start


1
#sudo apache2ctl开始httpd(pid 1390)已在运行
Amandeep Singh 2014年

那么,您遇到的问题是什么?
2014年

@AmandeepSingh:试试吧sudo apache2ctl restart
scheffield 2014年

1
@scheffield多次尝试此命令。问题是由于新版本的Apache中的根文件夹位置从/ var / www更改为/ var / www / html。我将所有文件移到了/ html子文件夹中,并且可以正常工作。
Amandeep Singh 2014年

4

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

# Include the virtual host configurations:

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

或删除文件。


+1。答案被否决了,但它包含了许多管理员的解决方案,他们可能会访问此问题。
奥古斯丁2014年

2

当服务器从12.04 LTS升级到14.04 LTS之后,我所有的虚拟主机都消失了时,augustin的答案对我有用。如果有声誉,我会投票赞成。

以下命令会将.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语法进行了更改(是2.2文档的链接)。Require

下面的命令将编辑的常见用法Order allow, deny,然后Allow from allRequire 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/* 

1

实际上,docroot确实从/ var / www到/ var / www / html在精确和可信赖之间切换。do-release-upgrade脚本没有将docroot退回是很糟糕的。

A)两者都有效,但是html更常规。CentOS在这方面具有影响力。“有效”页面现在也更加成熟。

B)您不必使用/ var / www / html,但如果您使用...

  • 您需要迁移内容或为其添加别名(不建议)。
  • 您需要在引用旧位置的任何地方进行更新。
  • 特别是备份/还原/自定义脚本。

C)从头开始构建和迁移可能会更容易。

D)如果您在Trusty上开箱即用地“ sudo apache2 -k graceful”,则将出现此症状,是否由于envvars不在范围内而进行了升级?使用“ sudo apache2ctl启动/停止/重新启动”代替。


0

就我而言:

  • 位于的html子文件夹/var/www/已经存在,但仍然出现错误:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • 我已经决定将我的网站托管在我的用户根目录中,例如,/home/{user}/sites/而不是默认目录/var/www/html
  • 我正在使用Apache 2.4.7(您可以使用来检查您的版本apache2 -v

我如何通过五个简单的步骤解决问题:

  1. /etc/apache2/apache2.conf第169行之后,我添加了以下内容:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. 我确保将名为website.confat的虚拟主机配置/etc/apache2/sites-available从default复制000-default.conf,如下所示:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. 我重新加载了站点(sudo a2dissite website && sudo a2ensite website)和服务器,并且最初的错误消失了。哇!但是一个新的出现了:“ AH00035:由于路径的一部分缺少搜索权限,因此无法访问/拒绝(文件系统路径'/ home / {user} / sites')。我在步骤4中解决了这个问题。

  4. 新问题是由于权限所致,因此我只将通往该website文件夹的每个目录设置为chmod 755。每一个!该home文件夹中,{}用户文件夹,该文件夹中的网站,甚至我的网站文件夹

  5. 刷新浏览器后,website.dev一切正常!

PS我已经website.dev/etc/hosts文件中设置了。

提示:要检查特定文件夹的权限,可以使用命令stat -c %a /path/to/file/or/folder。要检查目录各部分的权限,请使用namei -m /path/to/final/folder

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.