我的网络服务器托管一个网站的多个子域 (vhost),例如 sub1.example.com 和 sub2.example.com。这些 vhost 之间的唯一区别是 documentroot。其他所有内容都在 vhost 之间共享。
现在我想对 HTTPS 做同样的事情,但 SSL + 虚拟主机当然比较棘手。好消息是我的 SSL 证书对我的整个域都有效。因此我不需要指定每个虚拟主机的证书。我唯一想为每个虚拟主机指定的是文档根目录。
这常问问题说:
基于名称的虚拟主机是一种非常流行的识别不同虚拟主机的方法。它允许您对许多不同的站点使用相同的 IP 地址和相同的端口号。当人们转向 SSL 时,似乎很自然地会认为可以使用相同的方法在同一台服务器上拥有许多不同的 SSL 虚拟主机。
这是可能的,但前提是使用 2.2.12 或更高版本的 Web 服务器,并使用 0.9.8j 或更高版本的 OpenSSL 构建。这是因为它需要一项只有最新修订版的 SSL 规范才添加的功能,称为服务器名称指示 (SNI)。
我使用的是 Ubuntu 11.10,它附带 Apache 2.2.20 和 openssl 1.0.0e,所以我认为应该没问题。但是,我无法让它工作。我已经启用了默认和默认 SSL 站点。如果我像对 HTTP 所做的那样添加虚拟主机:
<VirtualHost *:443>
ServerName sub1.example.com
DocumentRoot /var/www/sub1
</VirtualHost>
然后尝试重新启动 Apache,我得到:
[2012 年 3 月 1 日星期四 23:55:15] [警告]默认VirtualHost 在端口 443 上重叠,第一个优先操作“启动”失败。
答案1
您可能需要三样东西:
- 一条
NameVirtualHost *:80
指令。如果您想遵循 Ubuntu 惯例,请将其放入 中ports.conf
。 <VirtualHost _default_:443>
修复默认 SSL 虚拟主机上的主机规范。它在默认配置中设置为;它需要与其他虚拟主机的侦听器规范和NameVirtualHost
指令相匹配。- 您还需要在新的 vhost 中指定与 SSL 相关的设置。
SSLEngine On
并且需要您的证书设置。
..如果不是这种情况,请提供您现有的配置和输出apache2ctl -S
。