Apache mod_ssl – 你可以拒​​绝回应主机名不正确的请求吗?

过去,我使用旧的DNS条目(属于其他人)指向服务器时遇到了问题。 为防止服务器响应,并使这些主机名显示为保存我的内容的确切副本,我使用NameVirtualHost并使默认虚拟主机总是响应503禁止。 这似乎很好地工作。

现在,我想知道如何用SSL实现同样的function。

显然,如果客户端在使用无法识别的主机名时通过HTTPS请求一个页面,他们会得到SSL警告,因为证书不匹配。 但是,他们可以select绕过这些警告。 即使客户端select忽略SSL警告,我也想阻止服务器提供内容。

看来我不能使用相同的NameVirtualHost技巧,因为使用SSL的基于名称的虚拟主机需要SNI,这与旧客户端存在潜在的兼容性问题,我宁愿避免。 相反,我必须使用基于IP的虚拟主机。 SSLRequireSSL似乎没有帮助 – 无论证书是否工作,都很高兴。

谷歌是这样的一个例子,虽然大概不使用Apache。 如果你编辑你的/ etc / hosts并在谷歌IP地址上指定一些随机的名字,当你通过SSL访问它时,你首先会得到一个警告,但是如果你继续,你会得到一个503错误 – “服务错误-27。我们所知道的“。

我不确定这真的很重要。 由于之前的stream浪的DNS条目导致的明显的重复网站实际上导致我们的内容在search引擎中出现在错误的域名下。 在这种情况下,假设(希望!)search引擎将不索引的内容,如果SSL证书是无效的。

不过,如果有一个标准的方法,我想这样做。

那么把客户从错误的域名redirect到你的域呢? Apache的mod_rewrite可以帮助解决这个问题:

RewriteEngine On RewriteCond %{HTTP_HOST} !yourdomain.com RewriteRule ^/(.*)$ https://yourdomain.com/$1 [R=301] 

有了这个configuration,所有的客户端都将被忽略SSL警告后redirect到正确的域名。 此外,search漫游器将索引您的内容与合适的域名。