升级到 Ubuntu 13.10 后 Apache 不使用 DocumentRoot(使用显示“它可以工作!”的默认页面)
Posted
技术标签:
【中文标题】升级到 Ubuntu 13.10 后 Apache 不使用 DocumentRoot(使用显示“它可以工作!”的默认页面)【英文标题】:Apache doesn't use DocumentRoot after upgrading to Ubuntu 13.10 (Uses default page that says "It works!") 【发布时间】:2013-11-19 10:23:34 【问题描述】:我有各种虚拟主机用于我的 Web 开发工作,包括 cnm.
sites-available/cnm
我的文件说得很简单:
<VirtualHost *:80>
ServerName cnm
DocumentRoot /var/www/cnm/public_html
</VirtualHost>
我升级到 Ubuntu 13.10,当我将浏览器指向 cnm/ 时,我看到 /var/www/index.html 文件似乎在默认文件中指示
sites-available/000-default.conf
它说(除其他外):
<VirtualHost *:80>
DocumentRoot /var/www
当我浏览到 cnm/ 时,我需要做什么才能让 Apache 读取我的 cnm 文档根目录?
注意事项:
我已经尝试将我的 sites-available/cnm 文件重命名为 sites-available/cnm.conf 并使用 a2ensite cnm
和 service apache2 reload
启用它。这是一件好事,但它不会改变任何事情。
我已经尝试将<VirtualHost *:80>
更改为<VirtualHost cnm.localhost>
或<VirtualHost cnm>
。那什么也没做。
【问题讨论】:
【参考方案1】:Ubuntu 13.10 使用 apache2.4,你应该检查你所有的 apache 配置。但是对于目前的情况,您应该注意a2ensite
和a2dissite
命令如果不以.conf
结尾,则无法在/etc/apache2/sites-available 中看到您的文件,因此将其重命名为@ 987654326@ 并运行a2ensite cnm
。
那么你的虚拟主机定义肯定会更好用*:80
,这意味着这个虚拟主机已为端口80上的所有IP接口(@987654329@)激活。cnm.localhost
或cnm
在这里不是有效值,只有IP号(您的 apache 服务器的 IP)或 *
以及端口号。
然后检查你的配置是如何被 apache 读取的,运行这些命令:
# load apache env
# be careful, there is a dot and a space
. /etc/apache2/envvars
# Check apache Virtualhosts config
apache2 -S
你应该得到类似的东西:
VirtualHost configuration:
*:80 is a NameVirtualHost
default server something (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost something (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost cnm (/etc/apache2/sites-enabled/cnm.conf:4)
如果没问题,并且您的主机文件中有cnm
的正确IP,并且您可以使用ping 测试,那么使用http://cnm/
应该使用在ServerName 中具有cnm 的Virtualhost 。
如果您从默认 Virtualhost 获得答案,则意味着 apache 未在该 IP/端口可用的 ServerName 和 ServerAlias 列表中找到 Host 标头中使用的名称,并回退到默认 Virtualhost。如果您真的卡住了(并且您没有忘记重新启动),您可以随时删除默认虚拟主机并只保留您正在使用的虚拟主机。
【讨论】:
谢谢!我的注释 1 说我已经尝试过了,但没有帮助。我仍然看到 /var/www/index.html 而不是 /var/www/cnm/index.html :-) 我有同样的问题,这没有帮助。我的虚拟主机正在工作,他们只是不听 DocumentRoot 设置。. /etc/apache2/envvars
什么也不输出。有什么想法吗?
@Redsandro 带有 envvars 的 dot 命令只是用来加载 apache 的 env 变量,因此您可以运行 apache2 -h
和所有其他 apache2 -X
命令而不会因缺少 env 变量而出现配置错误。现在没有 listen
用于 documentRoot,如果您有问题,请在本网站或 serverfault.com 上详细说明
@engineer:提出一个新问题,并在这个问题中添加 /etc/apache2/sites/* 中存在的文件列表、apache2 -S 的输出等、详细信息、详细信息、详细信息,错误肯定在这些细节之一中,没有信息我们无法猜测它在哪里。
另外请记住,他们已经更改了访问控制指令(例如 Order deny,allow Deny from all
到 Require all denied
),请参阅 changes when upgrading from 2.2 to 2.4【参考方案2】:
我找到了问题的答案。我需要删除 /etc/apache2/sites-enabled 中的文件。
-
删除 /etc/apache2/sites-enabled 中的文件
重命名 /etc/apache2/sites-available 中的配置文件以使用 .conf 结尾
对于 sites-available 中的每个文件,运行
sudo a2ensite mysite
。
运行sudo service apache2 reload
【讨论】:
我有同样的问题,这没有帮助。我的虚拟主机正在工作,他们只是不听DocumentRoot
设置。
第 2 步...不真实。谢谢。【参考方案3】:
我找到了这个问题的答案:
升级到Ubuntu 13.10
时,DocumentRoot
似乎没有什么不同。
这是因为 Apache 2.4 将目录配置移到了其他地方。您的旧 .conf
文件仍然有这些行:
DocumentRoot "/var/www/myVhost"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/myVhost">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
删除(或注释掉)<Directory>
指令,这样您就只有:
DocumentRoot "/var/www/myVhost"
现在重新加载您的设置:service apache2 reload
和 DocumentRoot
又回来了。 :)
【讨论】:
这些都没有帮助我,我的 DocumentRoot 在 000-default.conf 文件中定义后无法识别。有什么线索吗? 不知道,它在这里工作。也许将www-data
添加为user:group
?【参考方案4】:
将文件配置重命名为“cnm”,扩展名为 .conf
mv sites-available/cnm sites-available/cnm.conf
a2ensite sites-available/cnm.conf
准备好了!
service apache2 reload
【讨论】:
【参考方案5】:我也有同样的问题 方法是禁用 000-default 并重新加载 apache,但这不是解决方案,因为您必须同时只有一个虚拟主机:(
sudo a2dissite 000-default.conf
sudo service apache2 reload
【讨论】:
【参考方案6】:我找不到任何关于如何让它在我身边工作的分步教程。我在这里和那里收集了一些零碎的东西,所以对于那些需要遵循所有步骤的人来说,这里有:
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/local-mydefault.conf
$ sudo gedit /etc/apache2/sites-available/local-mydefault.conf
将以下内容粘贴到 local-mydefault.conf 文件中(将路径“/your/full/path”更改为您想要保存文件的位置。并将用户名更改为您自己的用户名):
# ------------------------------------------------------
<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /your/full/path
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /your/full/path>
DirectoryIndex index.php
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
allow from all
</Directory>
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>
User username
Group username
# ------------------------------------------------------
然后键入以下命令
$ cd /etc/apache2/sites-available/
$ sudo a2ensite local-mydefault.conf
$ sudo a2dissite 000-default.conf
$ sudo /etc/init.d/apache2 restart
【讨论】:
是否需要我遇到了类似的问题。我的服务器名称和我的 FQDN 与默认运行到 /var/www/html 目录中的相同。我禁用了默认配置,我的网站就像轻而易举地工作。谢谢@regilero。
sudo a2dissite 000-default.conf
帮我修好了。
【讨论】:
以上是关于升级到 Ubuntu 13.10 后 Apache 不使用 DocumentRoot(使用显示“它可以工作!”的默认页面)的主要内容,如果未能解决你的问题,请参考以下文章
升级到 Ubuntu 13.10 后 Eclipse 菜单不显示
解决更新到 Ubuntu 13.10 和 apache 2.4 后默认站点不存在的错误
在 ubuntu 13.10 上从 XAMPP 移动到 LAMP 后 htaccess 不起作用(在 apache linux 服务器中启用 htaccess)