在CentOS 6上为Apache 2.2设置默认的TLS SNI虚拟主机

我有一个Apache的CentOS 6服务器(httpd-2.2.15-15.el6.centos.x86_64)。 现在我使用OpenSSLconfiguration了TLS SNI,这很简单。

现在我有两个TLS虚拟主机在同一个IP,我想指定哪一个应该是默认的客户端不支持TLS SNI(是的,我看着你,git / hg)。

看看Apache文档应该有至less两种方法来做到这一点:

  • 设置为默认主机(和*:443所有其他)
  • 为非默认主机设置“SSLStrictSNIVHostCheck on”。

不幸的是这两种方法都不适合我 有人可以向我解释如何实现目标,为什么上述两种方法不能按我的预期工作?

第一启用将是默认的,所以重命名默认的虚拟主机的configuration文件像00-config_file_name所以它是第一个加载。

正如你(理所当然)想要logging的东西:

从Apache文档: 深入讨论虚拟主机匹配

基于名称的虚拟主机

如果条目对应于基于名称的虚拟主机,则名称列表包含一个或多个虚拟主机结构。 该列表包含虚拟主机的顺序与VirtualHost指令出现在configuration文件中的顺序相同。

该列表中的第一个虚拟主机(具有指定IP地址的configuration文件中的第一个虚拟主机)具有最高的优先级,并捕获对未知服务器名称或未包含主机:标题字段的请求的任何请求。

如果客户端提供了Host:头域,则会search列表以查找匹配的虚拟主机,并在ServerName或ServerAlias上执行第一个命中,并从该虚拟主机提供请求。 Host:头域可以包含端口号,但是Apache总是与客户端发送请求的真实端口相匹配。

所以,如果你的虚拟主机只使用一个configuration文件,你需要在文件中sorting,如果你包含几个分开的文件(包括Apache2样本站点被定义的../sites-enabled目录),你需要加载这些文件按照您需要的顺序先定义默认站点,然后按目录字母顺序加载。

始终按照相同的Apache文档(下面的示例链接在页面中),如果使用_default_ vhost,则必须在其他虚拟主机之前进行定义,这正是您将按照所需顺序定义虚拟主机的方式,但是在使用_default_ vhost ,主服务器将不再响应请求。