我通过 ISP 提供的 DNS 名称托管多个网站,并使用安装 haproxy 将它们拆分到路由器的 80 端口之外。它对我(我认为是 11 个)唯一网站非常有效,直到我将其中一个网站更改为 https。
现在,Google Chrome 假定我的所有网站都是 https,并且我只能访问 https 的网站 :-(
我怀疑 Chrome 这样做的原因是因为我的所有网站都以我的域名 (myexampledomain.com) 开头,例如网站 1 将是http://myexampledomain.com/website-one/main.html示例网站 2 为https://myexampledomain.com/website-two/main.html出于某种原因,在 chrome 成功访问 https 链接后,非 https 链接会自动以 https 形式访问。删除 s(使其成为 http),chrome 会将其重新添加回去。
当我通过 Internet Explorer 9 访问我的网站时,它们仍然运行良好,或者至少可以在没有自动完成 https 连接的情况下访问。所以,不,我的后端没有 http-to-https 重定向,这只是 Chrome 的愚蠢行为。有谁知道 Chrome 为什么愚蠢,以及是否有办法仍然从 Chrome 访问我的其他网站?我讨厌 IE,使用它让我身体疼痛 ;-)
答案1
(将我们的讨论写成正确的答案:)
Google Chrome(以及所有其他现代浏览器)支持严格传输安全HTTP 标头,告知浏览器“此站点只能通过 HTTPS 访问,因此将来即使用户要求使用 HTTP,也请改为使用 HTTPS。”随着使用 HTTPS 变得越来越普遍,发送此标头已成为新软件和框架的默认设置,因为通常如果设置了 HTTPS(Strict-Transport-Security 标头必须设置 HTTPS 才能生效),最好将其用于所有操作。正如您所发现的,您使用的软件默认配置为以这种方式运行。您在 Internet Explorer 9 中没有看到此行为,因为它太旧,无法支持 Web 的此功能。
两种解决方案是:(1) 更改软件配置以不发送标头,因为您不想强制所有用户使用 HTTPS;或 (2) 更改所有网站以使其通过 HTTPS 正常工作。我通常建议使用第二种选择,因为一旦您配置了服务器并拥有有效的 HTTPS 证书,现在就没有必要在互联网上使用未加密的连接了。
答案2
根据 Peter Cooper Jr. 的评论回复,我的心痛是由于我的 NGINX 安装与 gitlab omnibus 捆绑在一起造成的,它实际上告诉连接客户端他们在与其通信时应该始终使用 https,而在 Gitlab/NGINX 的情况下,安全通信期限设置为 24 个月!
有关 STS 标头的信息:http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Gitlab 安装信息:https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md