【问题标题】:Make Apache NOT listen on port 443 for some domains让 Apache 不在某些域的端口 443 上侦听
【发布时间】:2016-09-07 09:19:08
【问题描述】:

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 此时不要使用Virtualhost *:443,而是明确指定主机名。
  • 什么意思?我没有提到 Apache 侦听我所有域(SSL 和非 SSL)的相同 IP 地址。
  • 如果您使用*:443,则此 VirtualHost 将用作所有未明确指定“自己的”VH 的主机名的后备。因此,您需要使用Virtualhost somedomain.local:443 之类的内容来表明此 VH 仅适用于该特定域(加上 ServerAliases),而不适用于不存在显式配置的每个传入 HTTPS 请求。
  • 那没有帮助。如果没有找到匹配的 ServerName,Apache 仍然会使用默认的 VirtualHost 配置来回答。

标签: apache redirect ssl mod-rewrite lets-encrypt


【解决方案1】:

如果没有正确的证书,就无法响应(没有警告)https:// 请求,这就是协议的工作原理。 有多种选择,但都不是最适合您的:

  1. 有两个公共 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 更好,我真的不会知道。

【讨论】:

  • 我刚刚为我的两个 SSL 域设置了另外两个 IP 地址。我只会在那些域上收听 443,所以它应该被修复。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 2020-05-01
  • 2018-08-12
  • 1970-01-01
  • 2016-06-29
  • 2013-10-29
相关资源
最近更新 更多