Apache不遵守特定站点的ServerName指令


9

我已经使用Apache将一些站点配置为VirtualHosts,这些站点已经运行了一段时间。最近,我将服务器的主机名更改为所服务的域名之一,并将其​​添加到指向服务器的外部IP地址的/ etc / hosts中。

自从这样做以来,从笔记本电脑访问域会将我带到Apache的默认“有效!”。页。如果我从/ etc / apache2 / sites-enabled /中删除000-default,它将显示正确的站点。尝试使用“ www”访问该网站。前缀将我带到正确的站点,无论000-default是否在启用站点的站点中。

基于所有这些,我猜测默认配置将服务于默认页面,因为我是如何配置主机名或/ etc / hosts(或两者)的,但是我不知道如何在禁用该配置的同时保持这些设置不变。任何建议欢迎!

编辑-我当前的VirtualHost配置如下所示:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

总结一下:我已经设置了几个VirtualHost,这是唯一不能正常工作的VirtualHost。我可以正常访问http://www.domain.com,但http://domain.com可以带我使用Apache的默认“有效!”。页。如果禁用000默认配置,则会显示正确的页面。这仅在我将服务器的主机名设置为domain.com并在/ etc / hosts中添加一行,将domain.com指向服务器的外部IP地址后才开始发生。如果可能的话,我想离开那些地方。

编辑:我跑了apache2ctl -S因为/usr/sbin/apache2 -S给了我“ apache2:错误的用户名$ {APACHE_RUN_USER}”。这是输出:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

domain.com是否在主httpd.conf文件上用作ServerName?或apache2ctl.conf,您似乎正在使用ubuntu,因此名称可能有所不同。
大奖赛

Answers:


12

前几天迷失了这个问题。

当您有一个没有ServerName组件的<VirtualHost>容器时,它将使用默认的主机名。因为000-default可能没有ServerName组件,并且是第一个按字母顺序包含的组件,这就是为什么它对hostname.com的回答,并且不允许您显式声明的主机名起作用。


我知道,有什么办法可以解决?我希望默认配置处理任何未处理的域,但我不希望它处理该特定域。
约翰·德布斯

给它一个配置中使用的域以外的域,或将其重命名为zzz-default,以便最后使用它。
karmawhore,2010年

好吧,我想我现在已经明白了。我尝试使用zzz-default,但这不是我想要的确切行为。不过ServerName example.com,在默认配置中进行设置非常有效。谢谢!
约翰·德布斯

4

您在某处有NameVirtualHost *:80指令吗?

尝试:

/usr/sbin/apache2 -S

这将告诉您apache如何解析配置文件。您是否有具有实际IP的配置,或者都具有*?您是否缺少:80?Apache不喜欢将它们混合在一起。

默认情况下,您是否有ServerName domain.com或ServerAlias domain.com?


是的,我已经在/etc/apache2/posts.conf中找到了它。我将在问题中添加一个摘要,希望可以使其更加清楚。
约翰·德布斯

我的000默认配置未更改,它没有ServerName或ServerAlias指令。
约翰·德布斯

不建议使用NameVirtualHost。
2015年


0

这工作:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

当我有错字时,它不起作用(两次ServerName指令):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

当我有两次ServerName指令时,它一直解析到列出的第一个站点(此处未显示)。

希望这对某人有帮助...


0

我遇到了类似的问题,并通过在主httpd.conf文件中显式设置ServerName来解决此问题,而不是让apache自动确定它是什么。我假设apache决定与我的虚拟主机(稍后定义)相同,因此默认设置“成功”,将覆盖虚拟主机设置。

我只是将httpd.conf ServerName设置为该计算机具有的主机名,我永远不会为其提供网页。

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.