首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么所有不匹配的流量都流向第一个VirtualHost,而不是httpd.conf中的默认站点配置?

为什么所有不匹配的流量都流向第一个VirtualHost,而不是httpd.conf中的默认站点配置?
EN

Stack Overflow用户
提问于 2015-08-21 11:54:05
回答 1查看 4.1K关注 0票数 9

我一直在想,为什么所有不匹配的流量都流向第一个VirtualHost,而不是httpd.conf中的默认站点配置?

让我们假设httpd.conf没有被编辑过。

我创建一个名为/etc/httpd/conf.d/vhost.conf的文件

有以下几点:

代码语言:javascript
复制
<VirtualHost *:80>
        ServerName website.com
        ServerAlias www.website.com
        DocumentRoot "/site1"
        <Directory "/site1">
                AllowOverride All
                Require all granted
        </Directory>

        Some Rules Here
</VirtualHost>
<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot "/site2"
        <Directory "/site2">
                AllowOverride All
                Require all granted
        </Directory>

        Some Rules Here
</VirtualHost>

这就是上面的例子,如果您发送一个stackoverflow.com请求,您将被过滤到第一个vhost中,而不是httpd.conf中的默认站点。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-21 12:13:05

您没有做错任何事情;这就是Apache的基于名称的虚拟主机的工作方式:

在Apache上配置虚拟主机之后,原始的默认web服务器(如果有的话)变成了另一个虚拟主机;在httpd.conf中配置的web服务器没有什么特别之处。默认的虚拟主机(对于Apache“侦听”的IP地址)只是Apache文件中列出的第一个主机:

如果要向现有web服务器添加虚拟主机,还必须为现有主机创建一个<VirtualHost>块。这个虚拟主机中包含的ServerNameDocumentRoot应该与全局ServerNameDocumentRoot相同。首先在配置文件中列出此虚拟主机,以便它充当默认主机。

此外,从同一页:

如果没有找到匹配的虚拟主机,那么将使用首先列出的与IP地址匹配的虚拟主机。 因此,第一个列出的虚拟主机是默认的虚拟主机。当IP地址与DocumentRoot指令匹配时,来自主服务器的永远不会使用NameVirtualHost。如果您希望对不匹配任何特定虚拟主机的请求进行特殊配置,只需将该配置放在一个<VirtualHost>容器中,并将其列在配置文件中。

关于虚拟主机如何在Apache上工作的最好的总体描述是虚拟主机匹配的深入探讨。这还规定,

给定IP:端口对的配置文件中的第一个基于名称的vhost非常重要,因为它用于在该地址和端口上接收到的所有请求,而该IP:端口对的其他vhost没有匹配的ServerNameServerAlias。如果服务器不支持服务器名称指示,则它也用于所有SSL连接。 配置文件中具有指定IP地址的第一个vhost具有最高的优先级,并且捕捉到指向未知服务器名称的任何请求,或者没有header字段的请求(例如HTTP/1.0请求)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32139668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档