升级到 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 cnmservice apache2 reload 启用它。这是一件好事,但它不会改变任何事情。

    我已经尝试将&lt;VirtualHost *:80&gt; 更改为&lt;VirtualHost cnm.localhost&gt;&lt;VirtualHost cnm&gt;。那什么也没做。

【问题讨论】:

【参考方案1】:

Ubuntu 13.10 使用 apache2.4,你应该检查你所有的 apache 配置。但是对于目前的情况,您应该注意a2ensitea2dissite 命令如果不以.conf 结尾,则无法在/etc/apache2/sites-available 中看到您的文件,因此将其重命名为@ 987654326@ 并运行a2ensite cnm

那么你的虚拟主机定义肯定会更好用*:80,这意味着这个虚拟主机已为端口80上的所有IP接口(@98​​7654329@)激活。cnm.localhostcnm在这里不是有效值,只有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 allRequire 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>

删除(或注释掉)&lt;Directory&gt; 指令,这样您就只有:

    DocumentRoot "/var/www/myVhost"

现在重新加载您的设置:service apache2 reloadDocumentRoot 又回来了。 :)

【讨论】:

这些都没有帮助我,我的 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

【讨论】:

是否需要 部分?似乎对我没有任何帮助。但是其他东西解决了我的问题:)(我认为您现在需要明确指定目录的所有选项,但我不确定) @CJBrew 我不确定。我上面的答案是我通过当时为解决我的问题所做的研究收集的所有内容。但我已经忘记了所有这些作品到底是做什么的:-/【参考方案7】:

我遇到了类似的问题。我的服务器名称和我的 FQDN 与默认运行到 /var/www/html 目录中的相同。我禁用了默认配置,我的网站就像轻而易举地工作。谢谢@regilero。

sudo a2dissite 000-default.conf

帮我修好了。

【讨论】:

以上是关于升级到 Ubuntu 13.10 后 Apache 不使用 DocumentRoot(使用显示“它可以工作!”的默认页面)的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 升级到 13.10 后 mCrypt 不存在

升级到 Ubuntu 13.10 后 Eclipse 菜单不显示

解决更新到 Ubuntu 13.10 和 apache 2.4 后默认站点不存在的错误

在 ubuntu 13.10 上从 XAMPP 移动到 LAMP 后 htaccess 不起作用(在 apache linux 服务器中启用 htaccess)

ubuntu13.10升级到ubuntu14.04

如何为 Apache 2.4/ubuntu 13.10 及更高版本设置虚拟主机?