我透過 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 到 https 重定向,這只是 chrome 的愚蠢行為。有人知道為什麼 Chrome 很愚蠢,以及是否有辦法仍然從 Chrome 訪問我的其他網站?我討厭 IE,使用它會給我帶來身體上的痛苦;-)
答案1
(將我們的討論寫成正確的答案:)
Google Chrome(以及所有其他現代瀏覽器)支持嚴格的運輸安全HTTP 標頭,它通知瀏覽器「該網站應該只能透過 HTTPS 訪問,因此將來即使用戶請求 HTTP,也應該給他們 HTTPS」。隨著使用 HTTPS 變得越來越普遍,發送此標頭正在成為新軟體和框架中的預設設置,通常情況下,如果設定了 HTTPS(需要這樣才能使 Strict-Transport-Security 標頭產生任何效果) ,最好將它用於所有事情。正如您所發現的,您所使用的軟體預設配置為以這種方式運作。您沒有在 Internet Explorer 9 中看到該行為,因為它太舊,無法支援 Web 的此功能。
兩種解決方案是 (1) 更改軟體的配置以不傳送標頭,因為您不想強制所有使用者都通過 HTTPS,或 (2) 更改所有網站以透過 HTTPS 正常運作。我通常會推薦第二個選項,因為一旦您配置了伺服器並擁有有效的 HTTPS 證書,現在就真的不需要在 Internet 上使用未加密的連接了。
答案2
根據 Peter Cooper Jr. 的評論回复,我的心痛是由我的 NGINX 安裝與 gitlab 綜合捆綁在一起引起的,它有效地告訴連接客戶端,他們在與其通信時應該始終使用 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