0

操作系统:centOS 6.3 最终版

我已经安装了 mysql 和 apache2(httpd) 软件包并更改了 /etc/httpd/conf/httpd.conf 中的配置,如下所示:

<VirtualHost *:80>
    DocumentRoot /var/www/html/wordpress/
    ServerName www.asterix.int
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/staticSite/
    ServerName www.meins.lan
    ServerAlias www.deins.lan
    ServerAlias www.obelix.int
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /var/www/html/joomla/
    ServerName www.example.com
    ServerAlias www2.example.com
    ServerAlias www3.example.com
</VirtualHost>

所有 ServerName 和 ServerAlias 工作正常,我可以访问 3 个页面。

但是当我试图通过服务器的 ip 访问页面时,会发生一些奇怪的事情(至少对我来说)。apache2 返回第一个定义的虚拟主机的索引页(在这个例子中是 wordpress)。我已经对所有 3 个虚拟主机进行了尝试,并得到了相同的结果。

这是正常行为还是我做错了什么?

如果这是正常行为:我可以为所有对 ip 的请求设置 DocumentRoot 吗?

谢谢 !

4

2 回答 2

0

这是预期的行为。如果您使用 IP(比方说http://123.123.123.123/),Apache 将使用123.123.123.123HTTP 作为主机名。由于没有带有ServerNameorServerAlias123.123.123.123VirtualHost,因此使用了第一个 VirtualHost。

因此,如果您想要一个只为http://123.123.123.123/您侦听的 VirtualHost,可以简单地使用以下命令创建一个 VirtualHost:

<VirtualHost *:80>
    DocumentRoot /var/www/html/my-ip-site/
    ServerName 123.123.123.123
</VirtualHost>
于 2013-05-13T09:43:13.390 回答
0

这是正常行为。您正在使用一种称为基于名称的虚拟主机的虚拟主机方法。正如您可以想象的那样,这意味着 apache 的“路由”仅由 HTTP 请求中的主机名完成,根据配置中的 ServerName 和 ServerAlias 指令。

由于对服务器 IP 的请求(例如 1.2.3.4)无法路由到任何已定义的虚拟主机,因此 apache 采用默认虚拟主机。默认虚拟主机或多或少是定义的第一个虚拟主机。接受 IP 上的请求,因为您使用了通配符定义 *:80。

您可以通过 apache 检查在 apache 中设置的虚拟主机

# command apache2 -S
于 2013-05-14T08:40:32.593 回答