我的VirtualHost有什么问题?

我有以下VirtualHost

// filename: /etc/apache2/sites-available/ccbbbcc <VirtualHost 1.1.1.1:80> ServerAdmin [email protected] ServerName ccbbbcc.com ServerAlias www.ccbbbcc.com DocumentRoot /srv/www/ccbbbcc/production/public_html/ ErrorLog /srv/www/ccbbbcc/production/logs/error.log CustomLog /srv/www/ccbbbcc/production/logs/access.log combined </VirtualHost> 

然后我也有

 //filename: /etc/apache2/sites-available/default <VirtualHost 1.1.1.1:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> blah blah blah 

当我input我的浏览器http://1.1.1.1时 ,它会将我带到http://ccbbbcc.com ? 即使我指向IP 1.1.1.1的新url,也可以通过http://ccbbbcc.com访问网页。 为什么我无法从/ var / www目录提供页面?

其他症状 – ccbbbcc虚拟主机只覆盖我的其他虚拟主机的一些。 不是全部。

补充笔记

我已经确定使用a2ensite并重新启动apache。

这是我的/etc/apache2/ports.conf的样子

 NameVirtualHost 1.1.1.1:80 Listen 80 Listen 443 

我用文本“Hello World”创build了一个名为/srv/www/ccbbbcc/production/public_html/test.html的文件。 当我inputhttp://ccbbbcc.com/test.html时 ,页面加载正常。 当我键入http://1.1.1.1/test.html ,我得到一个404页面找不到。 当我inputhttp://1.1.1.1/时 ,网页浏览器刷新,然后显示urlhttp://ccbbbcc.com 。 然后,我将test.html附加到URL的末尾,Hello World再次出现。

那么这是否意味着有一个httpredirect发生在某处? 如果是这样,我似乎无法确定是什么原因造成的。

另外,我注意到ccbbbcc覆盖了我的一些虚拟主机,而不是全部。 似乎没有一个模式,虚拟主机是歧视/重写。

我也注意到,如果我做以下

 1. a2dissite ccbbbcc 2. /etc/init.d/apache2 reload 3. a2ensite ccbbbcc 4. /etc/init.d/apache2 reload 

然后突然间, http://ccbbbcc.com服务于/ var / www /中的页面,而http://1.1.1.1也服务于/ var / www中的页面。 a2ensite / a2dissite是如何影响页面加载的? 使ccbbbcc再次从/ srv / www / cbs / production服务页面的唯一方法是重新启动我的整个linux服务器! 这是怎么回事?

正如你可以在深入讨论虚拟主机匹配中看到的那样:

该列表中的第一个虚拟主机(具有指定IP地址的configuration文件中的第一个虚拟主机)具有最高的优先级,并捕获对未知服务器名称或未包含主机:标题字段的请求的任何请求。

Apache httpd在/etc/apache2/sites-available/ccbbbcc之前加载并评估文件/etc/apache2/sites-available/ccbbbcc

/etc/apache2/sites-available/default重命名为/etc/apache2/sites-available/00_default/etc/apache2/sites-available/ccbbbcc/etc/apache2/sites-available/01_ccbbbcc ,这样默认文件首先被加载。

你有一个NameVirtualHost指令?

看到这里: http : //httpd.apache.org/docs/2.0/mod/core.html#namevirtualhost

基本上,如果您没有NameVirtualHost *或特定的NameVirtualHost 1.1.1.1:80指令,则虚拟主机不是基于名称的,而是基于地址:端口的。

如果没有虚拟主机中的ServerName / ServerAlias块,apache将在configuration读取期间首先实例化该域。 在这种情况下,按照字母顺序,ccbbbccc.com的configuration文件必须在默认之前。

在/ etc / apache2 / sites-enabled / default中添加ServerName和/或ServerAlias指令,您应该设置。