我有一个 *.phppointofsale.com 的通配符 SSL 证书,它工作正常,但是当用户访问https://www.phppointofsale.com它使用*.phppointofsale.com 的文档根目录。
我有 2 个问题
- 我可以在 www.phppointofsale.com、forums.phppointofsale.com、phppointofsale.com 上使用它吗?
- 我如何才能拥有多个 SSL 证书的文档根目录?
答案1
Cpanel 对如何设置此功能进行了限制,而这在 Apache 环境中通常不存在(我想,这是为方便而付出的代价)。
目前有几种方法可以解决这个问题:
a) 您可以手动编辑配置文件(不建议这样做 - CPanel 本身可能会覆盖手动更改)
b) 将每个子域名设置为单独的帐户,并为每个(子)域名提供自己的 IP 地址(浪费 IP,繁琐)
c) 使用 mod_rewrite 将您的请求重定向到正确的文档根目录。
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTP_HOST} ^forums\.phppointofsale\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule ^(.*) /forums/$1
它进入 /home/you/public_html/.htaccess,并假定 /home/you/public_html/forums 是 forums.phppointofsale.com 的文档根目录。
答案2
我注意到所有这些主机名都指向同一个 IP 地址。基于名称的虚拟主机无法通过 HTTPS 工作,因为 HOSTNAME 是在加密的 http 标头中发送的。解决这个问题的唯一方法是让每个 ssl vhost 位于不同的 IP 地址或端口上。
该限制描述于维基百科
答案3
但是,如果您控制服务器,则可以设置 SNI。
... SSL 协议的扩展,称为服务器名称指示...使用 SNI,您可以让多个虚拟主机共享相同的 IP 地址和端口,并且每个虚拟主机都可以拥有自己唯一的证书(以及其余配置)。