虚拟服务具有一个启用虚拟托管支持的配置选项。在虚拟服务中启用该选项表示,虚拟服务是服务器名称指示 (SNI) 部署中的另一个服务的父虚拟服务或子虚拟服务。

在客户端和父虚拟服务之间进行 SSL 握手期间,父虚拟服务检查其子虚拟服务的域名是否与客户端握手中的域名匹配。如果匹配,则父虚拟服务将客户端请求传送到具有匹配域名的子虚拟服务。可以使用通配符以匹配域名的开头或结尾。

通配符

在子虚拟服务的配置中,可以在域名开头或结尾使用通配符:

  • *.example.com - 如果域名的其余部分匹配,则匹配域名开头的任何标签。该示例匹配 mail.example.com、app1.example.com、app1.test.example.com、app1.test.b.example.com、any.set.of.labels.in.front.of.example.com 等。

  • .example.com - 匹配任何一组起始标签或没有起始标签的域名。该示例不仅匹配 *.example.com 匹配的任何域名,而且还匹配“example.com”(前面没有其他标签)。

  • www.example.* - 如果其他标签匹配,则匹配任何一组结束标签。该示例匹配 www.example.com、www.example.org、www.example.edu、www.example.edu.any.set.of.labels.after.www.example 等。

域名可以在所示的位置中包含任何这些通配符。不支持在域名的其他标签位置中使用通配符。同样,不支持在同一域名中使用多个通配符。

使用最长匹配项

对于多个匹配项,将使用最长和最具体的匹配项。

例如,假设父虚拟服务具有以下子虚拟服务:

  • VS1:匹配域名 *.example.com

  • VS2:匹配域名 *.test.example.com

如果服务器证书包含以“.test.example.com”结尾的域名,则该证书在 VS2 上匹配,但在 VS1 上不匹配。