Apache 虚拟主机语法

Apache VirtualHost Syntax

这个:

<VirtualHost subdomain.example.com:443> 
... 
ServerName subdomain.example.com
...
</VirtualHost>

有效。通常你会看到 *:443 或 <IpAdress>:443.

为什么 subdomain.example.com:443 有效?

之所以有效,是因为 subdomain.example.com:443valid documented value:

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>

Addr can be any of the following, optionally followed by a colon and a port number (or *)

  • 虚拟主机的IP地址;
  • 虚拟主机 IP 地址的完全限定域名(不推荐);
  • 字符*,作为通配符,匹配任意IP地址。
  • 字符串 _default_,它是 *
  • 的别名

我知道不建议使用域名,因为它可能需要 DNS 查询,并且实际过滤是在 IP 地址上完成的(对此持保留态度,我只是推测)但它仍然有效。

请注意,这不会影响 Apache 将监听的本地 IP 地址和端口。它只是允许加速虚拟主机解析并在您需要时简化设置。

注:

<VirtualHost subdomain.example.com:443> 

仅当 subdomain.example.com 解析为您的虚拟主机绑定的 IP 地址时, 才有效 - 例如由部署 Apache 的服务器处理的 IP 地址。

如果您是 运行 另一台机器上的反向代理,那么此指令将告诉 Apache httpd 绑定到它所在机器上不可用的 IP 地址。

如果你是 运行 IPV4 IPV6,我不确定域名会导致 all 可绑定的地址。相同,如果域名绑定到多个地址(地理定位或循环)

因此,虽然它 可能 现在可以工作,但它可能会在所有这些假设不再(全部)正确的情况下随时崩溃

简而言之:绑定到 *_default_ 并使用 ServerName(或别名)- 因为一旦请求到达您的网络服务器,您无论如何都需要处理它。