我以前遇到过指向服务器的旧 DNS 条目(属于其他人)的问题。为了防止服务器响应并使这些主机名看起来保存着我的内容的精确副本,我使用 NameVirtualHost 并使默认虚拟主机始终响应 503 禁止。这似乎效果很好。
不过,现在我想知道如何最好地使用 SSL 实现同样的目标。
显然,如果客户端使用无法识别的主机名通过 HTTPS 请求页面,他们会收到 SSL 警告,因为证书不匹配。但是,他们可以选择绕过这些警告。即使客户端选择忽略 SSL 警告,我也希望阻止服务器提供内容。
似乎我不能使用相同的 NameVirtualHost 技巧,因为使用 SSL 的基于名称的虚拟主机需要 SNI,这存在与旧客户端的潜在兼容性问题,我宁愿避免这种情况。相反,我必须使用基于 IP 的虚拟主机。SSLRequireSSL 似乎没有帮助 - 无论证书是否有效,它都很好。
Google 就是一个例子,尽管它可能没有使用 apache。如果您编辑 /etc/hosts 并将某个随机名称指向 Google IP 地址,当您通过 SSL 访问它时,您首先会收到警告,但如果您继续,则会收到 503 错误 - “服务错误 -27。这就是我们所知道的”。
我不确定这是否真的很重要。之前由于 DNS 条目错误而导致的明显重复网站实际上导致我们的内容以错误的域名出现在搜索引擎中。在这种情况下,如果 SSL 证书无效,搜索引擎大概(希望如此!)不会索引内容。
尽管如此,如果有标准方法的话,我还是愿意正确地做这件事。
答案1
那么如何将客户端从错误的域名重定向到您的域名呢?Apache 的 mod_rewrite 可以帮助解决此问题,如下所示:
RewriteEngine On
RewriteCond %{HTTP_HOST} !yourdomain.com
RewriteRule ^/(.*)$ https://yourdomain.com/$1 [R=301]
通过此配置,所有客户端在忽略 SSL 警告后都将重定向到正确的域名。此外,搜索机器人将使用合适的域名索引您的内容。