我希望服务器响应https://abc.def.com
,但不响应,同时当两个域指向同一个 IP 地址时https://def.com
仍提供服务。http://def.com
我目前有一个类似的配置:
<IfModule mod_ssl.c>
Listen 1.2.3.4:443
<VirtualHost 1.2.3.4:443>
ServerName abc.def.com
[SSL on, key & cert file, etc.]
[...]
</VirtualHost>
</IfModule>
该网站按预期运行,到目前为止一切都很好,但由于某种原因,服务器也响应https://def.com
并提供 abc.def.com 的证书,而不是拒绝连接,尽管这在任何地方都没有配置。default-ssl.conf 被禁用。
有什么想法可以告诉服务器不提供证书但拒绝未配置域的连接吗?我认为这应该与 SNI 有某种关系,但我不确定是否可行以及如何可行。
答案1
不可能。如果该主机名没有特定配置,Apache 将在默认主机中应答。并且,在连接的安全端设置了有效证书之前,您无法控制发回的内容。
所以唯一的选择是:
拥有对 def.com 有效的证书。此时您可以重定向回 http,但如果已经费尽心思获取证书,那又何必呢?请注意,证书可以以低价(甚至免费)获得。
单独的 IP 地址。
答案2
您可以使用流量重定向到 http 来实现
<VirtualHost 1.2.3.4:443>
ServerName def.com
Redirect 301 / http://def.com
</VirtualHost>
或者使用重写规则
RewriteCond %{HTTPS} on
RewriteCond %{SERVER_NAME} ^def.com
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
答案3
Apache 配置看起来不错,您可以在 DNS 级别修复它。
配置您的主机以解析 abc.def.com,但是不是通过编辑本地 hosts 文件并删除以下条目
1.2.3.4 def.com