使 Apache 不监听某些域的端口 443

Make Apache NOT listen on port 443 for some domains

我有一个 Apache 服务器设置为监听几个域的端口 80 和其中两个域的 443(至少这是我想要的)。 所以我的 Virtualhost *:443 带有 "my-ssl-domain.com" 和 "my-other-ssl-domain.com" ServerName。这两个域都有一个虚拟主机 *:80,它使用 mod_rewrite 简单地重定向到 HTTPS 版本。我正在为它们使用 let's encrypt。

我还有多个 (>10) 个只能通过 HTTP 工作的域。

发生的情况是,如果我转到“https://www.my-non-ssl-domain.com”,浏览器会抱怨没有有效的证书。 Google 似乎也将该页面编入索引,我想避免它,因为它似乎是糟糕的 SEO。

我想要 301 重定向“https://www.my-non-ssl-domain.com”到“http://www.my-non-ssl-domain.com" 或者至少根本不回答,就好像使用 HTTPS 的域根本不存在一样。

我该如何解决这个问题?

如果没有正确的证书,就无法(在没有警告的情况下)响应 https:// 请求,这就是协议的工作原理。 有多种选择,但其中 none 可能最适合您:

  1. 有两个 public IP 地址,一个用于同时具有 http+https 的站点,另一个仅用于 http。然后将 Apache 配置为仅在第一个端口上侦听端口 443。

  2. 让我们加密证书(几乎)没有成本,所以只需去获取所有域名的证书(即使您出于某种原因不想通过 https 提供内容,至少你将能够正确地将访问者重定向到 http 站点)

  3. 我不知道 SEO 的后果,但是如果你像这样配置默认值 <VirtualHost *:443>(你需要放置它以便它是 Apache 加载的第一个 VirtualHost :443,它最好放在httpd.conf的底部):

<VirtualHost *:443>
ServerName non.existing_host.noTld
</VirtualHost>

在那种情况下,客户端将不会收到证书不匹配警告(NET::ERR_CERT_COMMON_NAME_INVALID),它们将由于 SSL 协议错误(ERR_SSL_PROTOCOL_ERROR)而断开连接,这可能对 SEO 更好,也可能不好,我真的不知道。