我的 VirtualHost 有什么问题?

我的 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

为什么当我在浏览器中输入http://1.1.1.1,这需要我http://ccbbbcc.com? 即使我将新 URL 指向 IP 1.1.1.1,网页仍从http://ccbbbcc.com. 为什么我无法从 /var/www 目录提供页面?

其他症状 - cccbbbcc vhost 仅覆盖了我的部分其他 vhost。不是全部。

补充笔记

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

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

NameVirtualHost 1.1.1.1:80
Listen 80
Listen 443

我创建了一个名为 /srv/www/ccbbbcc/production/public_html/test.html 的文件,其中包含文本“Hello World”。当我输入http://ccbbbcc.com/test.html,页面加载正常。当我输入http://1.1.1.1/test.html,我得到了 404 页面未找到。当我输入http://1.1.1.1/,网络浏览器刷新,然后显示网址http://ccbbbcc.com然后我将 test.html 附加到 url 末尾,Hello World 再次出现。

那么这是否意味着某处发生了 http 重定向?如果是这样,我似乎无法确定是什么原因造成的。

另外,我注意到 cccbbbcc 覆盖了我的部分虚拟主机,而不是全部。似乎没有区分/覆盖哪个虚拟主机的模式。

我还注意到,如果我执行以下操作

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 如何影响页面加载位置? 让 cccbbbcc 再次从 /srv/www/cbs/production 提供页面的唯一方法是重新启动我的整个 Linux 服务器! 发生了什么?

答案1

正如你所读到的虚拟主机匹配的深入讨论

此列表中的第一个 vhost(配置文件中具有指定 IP 地址的第一个 vhost)具有最高优先级,并捕获对未知服务器名称的任何请求或没有 Host: 标头字段的请求。

您的 Apache httpd/etc/apache2/sites-available/ccbbbcc之前会加载并评估该文件/etc/apache2/sites-available/default

/etc/apache2/sites-available/default例如,将其重命名为/etc/apache2/sites-available/00_default和,以便首先加载默认文件。/etc/apache2/sites-available/ccbbbcc/etc/apache2/sites-available/01_ccbbbcc

答案2

您是否有 NameVirtualHost 指令?

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

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

答案3

如果您的虚拟主机中没有 ServerName/ServerAlias 块,apache 将为配置读取期间首先实例化的域提供服务。在这种情况下,按字母顺序排列,ccbbbccc.com 的配置文件必须位于默认之前。

在 /etc/apache2/sites-enabled/default 中添加 ServerName 和/或 ServerAlias 指令,然后就设置好了。

相关内容