我有两个网站需要不同的域名,但都必须使用运行 Apache httpd 的同一台服务器并使用 SSL。以下是示例:
- www.example.com遗留应用程序流量较大
- beta.example.com新网站对 URL 结构进行了向后不兼容的更改
每个域都有不同的文档根路径。SNI 不是一个选项,但我有一个用于 *.example.com 的通配符 SSL 证书。分配第二个 IP 不是一个选项。
如何配置 Apache 以对端口 443 上的任何流量使用通配符 SSL 证书,然后在 SSL 握手后继续基于名称的虚拟托管?
在 nginx 中,它可能是一个基于域名的 if 块,并且在它之外有 SSL 配置。是否有与 Apache 2.2 兼容的等效程序?
编辑:根据我的客户的要求,SNI 不是一个选项,因为与替代方案相比,浏览器支持度下降了。我正在寻找某种方法来使用旧标准提供证书,然后在 SSL 端口上应用经典的 VHost 定义,就像在端口 80 上应用它们一样。
答案1
如果你有通配符 SSL 证书,这意味着你可以在你的配置文件中使用此证书两个都虚拟主机。
您可以简单地在 vhost 配置文件中提供它们:
<VirtualHost *:443>
ServerName www.example.com
SSLCertificateFile /path/to/file.crt
SSLCertificateKeyFile /path/to/file.key
...
</VirtualHost>
<VirtualHost *:443>
ServerName beta.example.com
SSLCertificateFile /path/to/file.crt
SSLCertificateKeyFile /path/to/file.key
...
</VirtualHost>
不要忘记:虚拟主机识别将基于Host:
请求标头,而不是 SNI。SNI 仅用于虚拟主机识别前ssl 握手。在 SSL 握手的 SNI 部分和 HTTP 部分使用不同的 vhost 是完全可以的,尽管这些非凡的查询将在 apache 日志中引起一些警告。