我已经有几个站点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设置为机器拥有的主机名,我永远不会为其提供网页。