升级到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 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/*
实际上,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
检查您的版本)
我是如何通过五个简单步骤解决问题的:
-
在
/etc/apache2/apache2.conf
我在第169行之后添加了以下内容:Options Indexes FollowSymLinks AllowOverride None Require all granted -
我确保在
/etc/apache2/sites-available
名为website.conf
虚拟主机配置是从默认的000-default.conf
复制的,看起来像:ServerAdmin webmaster@localhost ServerName website.dev ServerAlias www.website.dev DocumentRoot /home/{user}/sites/website -
我重新加载了我的网站(
sudo a2dissite website && sudo a2ensite website
)和我的服务器,并且初始错误消失了。 哇噢! 但是出现了一个新的:“AH00035:访问/拒绝(文件系统路径’/ home / {user} / sites’),因为路径组件上缺少搜索权限”。 我在第4步解决了这个问题。 -
新问题是由于权限,所以我只是将每个通往
website
文件夹的目录设置为chmod 755
。 每一个!home
文件夹,{user}文件夹,sites文件夹,甚至我的网站文件夹 -
在
website.dev
刷新我的浏览器后,一切都很好!
PS我已经在/etc/hosts
文件中设置了website.dev
。
额外提示:要检查特定文件夹的权限,您可以使用命令stat -c %a /path/to/file/or/folder
。 要检查目录的每个部分的权限,请使用namei -m /path/to/final/folder
。