升级到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} 

这是/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" )。

症状和解决方案

在许多问答网站或论坛中,人们会混淆症状和实际原因。 我刚刚将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 

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

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

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

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

  Options FollowSymLinks AllowOverride None Require all deny   Options Indexes FollowSymLinks AllowOverride None Require all granted  

因此,如果您在/ 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后,所有虚拟主机都消失了,奥古斯丁的答案对我有用。 如果我有这样的声誉,我会赞成它。

以下命令将.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 syntax还Require更改( 这是2.2文档的链接)。

以下命令将编辑Order allow, deny的常用用法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/* 

实际上,docroot确实在/ var / www到/ var / www / html之间进行了精确和可靠的更改。 do-release-upgrade脚本不会使docroot回退,这很糟糕。

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

B)你不必使用/ var / www / html,但如果你这样做……

  • 您需要迁移您的内容或别名(不推荐)。
  • 您需要更新引用旧位置的任何位置。
  • 特别是备份/恢复/自定义脚本。

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

D)如果您在Trusty上开箱即用“sudo apache2 -k graceful”,升级与否,由于envvars不在范围内,会出现此症状? 请改用“sudo apache2ctl start / stop / restart”。

就我而言:

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

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

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

      Options Indexes FollowSymLinks AllowOverride None Require all granted  
  2. 我确保在/etc/apache2/sites-available名为website.conf虚拟主机配置是从默认的000-default.conf复制的,看起来像:

      ServerAdmin webmaster@localhost ServerName website.dev ServerAlias www.website.dev DocumentRoot /home/{user}/sites/website  
  3. 我重新加载了我的网站( sudo a2dissite website && sudo a2ensite website )和我的服务器,并且初始错误消失了。 哇噢! 但是出现了一个新的:“AH00035:访问/拒绝(文件系统路径’/ home / {user} / sites’),因为路径组件上缺少搜索权限”。 我在第4步解决了这个问题。

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

  5. website.dev刷新我的浏览器后,一切都很好!

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

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