我在 Ubuntu 服务器 (14.04) 上运行了 Apache。我已配置 DNS A 记录和 VH,以便拥有一个域和两个子域,如下所示:
- 示例.com
- subdomain1.example.com
- subdomain2.example.com
一切运行正常,但问题是,当我尝试通过服务器 IP 访问我的网站时,浏览器会显示 subdomain1.example.com 内容,而不是 example.com 内容。如果我输入 example.com,则不会发生这种情况,在这种情况下一切正常,但我担心这是否会在将来成为问题,或者我是否做错了什么...
以下是 example.com 和 subdomain1.example.com 的 Apache VH 配置(subdomain2 与 subdomain1 完全相同):
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName subdomain1.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/subdomain1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
希望我解释清楚了...谢谢!
答案1
收到请求后,服务器首先根据本地 IP 地址和端口组合将其映射到最佳匹配项。非通配符具有更高的优先级。如果完全没有基于 IP 和端口的匹配项,则使用“主”服务器配置。
如果多个虚拟主机包含最佳匹配的 IP 地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最佳匹配。如果未找到匹配的基于名称的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。因此,给定 IP 地址和端口组合的第一个列出的虚拟主机是该 IP 和端口组合的默认虚拟主机。
这基本上意味着遇到的第一个 VirtualHosthttpd.conf
将被用作默认值,或者如果所有虚拟主机都在单独的(包含的).conf
文件中(这可能是您的情况),那么按字母顺序排列的第一个.conf
文件将被使用。
TLDR:尝试将.conf
包含example.com
虚拟主机的文件重命名为aaa.conf
(并重新启动 httpd)