Apache2 ssl +同一个域的虚拟主机

我的networking服务器托pipe网站的几个子域(vhosts),比如说sub1.example.com和sub2.example.com。 这些虚拟主机之间唯一的区别就是文档。 其他的东西都在虚拟主机之间共享。

现在我想为HTTPS做同样的事情,但当然ssl +虚拟主机是棘手的。 好的是我的SSL证书对我的完整域有效。 因此,我不需要指定每个虚拟主机证书。 我唯一想指定的每个虚拟主机是文档根目录。

FAQ说:

基于名称的虚拟主机是一种非常stream行的识别不同虚拟主机的方法。 它允许您为许多不同的站点使用相同的IP地址和相同的端口号。 当人们转而使用SSL时,假设可以使用相同的方法在同一台服务器上拥有许多不同的SSL虚拟主机,这似乎是自然而然的。

这是可能的,但只有使用2.2.12或更高版本的Web服务器,使用0.9.8j或更高版本的OpenSSL构build时才是可能的。 这是因为它需要一个只添加了最新版本的SSL规范的特性,称为服务器名称指示(SNI)。

我使用Apache 2.2.20和openssl 1.0.0e附带的Ubuntu 11.10,所以我认为我应该很好。 但是,我不能得到它的工作。 我已经启用了default和default-ssl网站。 如果我添加一个虚拟主机,就像我为HTTP所做的那样:

<VirtualHost *:443> ServerName sub1.example.com DocumentRoot /var/www/sub1 </VirtualHost> 

然后尝试重新启动Apache,我得到:

[Thu Mar 01 23:55:15 2012] [warn] 默认 VirtualHost在端口443上重叠,第一个优先级Action'start'失败。

你可能需要的是三件事情:

  1. NameVirtualHost *:80指令。 如果你想遵循Ubuntu约定,把它放在ports.conf
  2. 修复默认SSL虚拟主机上的主机规格。 它在默认configuration中设置为<VirtualHost _default_:443> ; 它需要匹配你的其他虚拟主机和你的NameVirtualHost指令的监听器规范。
  3. 您还需要在新的虚拟主机中指定与SSL相关的设置。 SSLEngine On并且您的证书设置是必需的。

..如果不是这样的话,请提供您现有的configuration和apache2ctl -S的输出。