Air*_*bat 5 linux apache centos virtualhost httpd.conf
我一直想知道为什么所有不匹配的流量都流向第一个VirtualHost而不是httpd.conf中的默认站点配置?
假设httpd.conf没有被编辑。
我创建一个名为 /etc/httpd/conf.d/vhost.conf
具有以下内容:
<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>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,如果您发送对stackoverflow.com的请求,则无论过滤器是什么,而不是httpd.conf中的默认网站,都将被过滤到第一个虚拟主机中
我想念什么?
你没有做错任何事;这就是 Apache基于名称的虚拟主机的工作方式:
在 Apache 上配置虚拟主机后,原来的默认 Web 服务器(如果有)就变成了另一个虚拟主机;中配置的 Web 服务器没有什么特别之处httpd.conf。默认虚拟主机(对于 Apache “侦听”的 IP 地址)只是Apache 配置文件中列出的第一个:
如果要将虚拟主机添加到现有 Web 服务器,则还必须
<VirtualHost>为现有主机创建块。此虚拟主机中包含的ServerName和DocumentRoot应与全局ServerName和DocumentRoot. 首先在配置文件中列出此虚拟主机,以便它充当默认主机。
此外,从同一页面:
如果未找到匹配的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。
因此,列出的第一个虚拟主机是默认虚拟主机。在
DocumentRoot从主服务器将永远当一个IP地址相匹配使用NameVirtualHost的指令。如果您想为与任何特定虚拟主机不匹配的请求进行特殊配置,只需将该配置放入<VirtualHost>容器中并在配置文件中首先列出它。
我发现的关于虚拟主机如何在 Apache 上工作的最佳整体描述是对虚拟主机匹配的深入讨论。这也说明,
给定 IP:port 对的配置文件中的第一个基于名称的 vhost 很重要,因为它用于在该地址和端口上收到的所有请求,而该 IP:port 对的其他 vhost 没有匹配的
ServerName或ServerAlias。如果服务器不支持服务器名称指示,它也用于所有 SSL 连接。配置文件中具有指定 IP 地址的第一个 vhost 具有最高优先级,并捕获对未知服务器名称的任何请求,或没有 Host: 标头字段的请求(例如 HTTP/1.0 请求)。
| 归档时间: |
|
| 查看次数: |
1751 次 |
| 最近记录: |