DNS 和子域名问题

DNS 和子域名问题

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

Apache 文档

收到请求后,服务器首先根据本地 IP 地址和端口组合将其映射到最佳匹配项。非通配符具有更高的优先级。如果完全没有基于 IP 和端口的匹配项,则使用“主”服务器配置。

如果多个虚拟主机包含最佳匹配的 IP 地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最佳匹配。如果未找到匹配的基于名称的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。因此,给定 IP 地址和端口组合的第一个列出的虚拟主机是该 IP 和端口组合的默认虚拟主机。

这基本上意味着遇到的第一个 VirtualHosthttpd.conf将被用作默认值,或者如果所有虚拟主机都在单独的(包含的).conf文件中(这可能是您的情况),那么按字母顺序排列的第一个.conf文件将被使用。

TLDR:尝试将.conf包含example.com虚拟主机的文件重命名为aaa.conf(并重新启动 httpd)

相关内容