Apache不尊重特定站点的ServerName指令

我已经有几个站点configuration为使用Apache的VirtualHosts,一直工作得很好。 我最近将服务器的主机名更改为正在服务的域名之一,并将其​​添加到指向服务器外部IP地址的/ etc / hosts中。

由于我这样做,从我的笔记本电脑访问的域名需要我的Apache的默认“它的作品!” 页。 如果我从/ etc / apache2 / sites-enabled /删除了000-default,它将显示正确的站点。 尝试使用“www”访问网站 前缀带我到正确的网站,无论是否默认是在网站启用。

基于所有这一切,我猜默认configuration正在提供默认页面,因为我已经configuration主机名或/ etc / hosts(或两者),但我不知道如何禁用,而同时留下这些设置。 任何build议欢迎!

编辑 – 我目前的VirtualHostconfiguration如下所示:

<VirtualHost *:80> ServerName domain.com ServerAlias www.domain.com ServerAdmin [email protected] DocumentRoot /srv/www/domain ErrorLog /srv/www/domain/logs/error.log CustomLog /srv/www/domain/logs/access.log combined </VirtualHost> 

总结:我有几个VirtualHosts设置,这是唯一一个不能正常工作。 我可以访问http://www.domain.com就好了,但http://domain.com把我带到Apache的默认“它的工作!” 页。 如果我禁用000默认configuration它显示正确的页面。 这只是在将服务器的主机名设置为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 

前些日子丢失了这个问题。

当你有一个没有ServerName组件的<VirtualHost>容器时,它将使用默认的主机名。 由于000-默认可能没有ServerName组件,并且是第一个被包含的字母顺序,所以它为什么会回答hostname.com,并且不允许显式声明的主机名工作。

你有一个NameVirtualHost *:80指令吗?

尝试:

 /usr/sbin/apache2 -S 

这将告诉你如何Apacheparsingconfiguration文件。 你有configuration有实际的IP或所有有*? 你有没有想过:80? Apache不喜欢混合这些。

你有一个ServerName的domain.com或ServerAlias的domain.com默认?

在VirtualHost指令中检查ServerName和ServerAlias:

 <VirtualHost *:80> ServerName domain ServerAlias www.domain.com ServerAlias *.domain.com </VirtualHost> 

阅读: http : //httpd.apache.org/docs/2.2/mod/core.html#serveralias,http : //httpd.apache.org/docs/2.2/vhosts/

这工作:

 <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指令,它保持parsing到列出的第一个网站(这里没有显示)。

希望这有助于某人…

我有一个类似的问题,并通过在主httpd.conf文件中显式设置一个ServerName来解决它,而不是让Apache自动找出它。 我假设apache决定的是和我的虚拟主机(稍后定义的)一样,所以默认的一个“胜出”,覆盖虚拟主机设置。

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