Nginx

F我參考__ox和d_ng_我x_F一世r和F這X一種ndnG一世nXFirefox and nginx: Firefox 似乎記憶體並傳遞了錯誤子域的內容

  • February 20, 2021

我目前在不同的子域下混合執行不同的服務:

a.example.com:nginx 代理後面的 Docker 容器

b.example.com:nginx 站點

c.example.com:nginx 代理後面的 Docker 容器

a 和 c 共享同一個 ipv4,b 有自己的 ipv4,而 a、b 和 c 都使用不同的 ipv6 地址。它們都是 SSL 安全的,非 ssl 流量由 nginx(通過 301)重定向到 ssl 安全站點。

所有這些都通過 HSTS 保護(未設置可選的“includeSubdomains”)。

現在,我的問題

  1. 通過 Firefox打開https://a.example.com -> 工作
  2. 通過 Firefox打開https://b.example.com -> 工作
  3. 通過 Firefox打開https://a.example.com -> 不起作用,而是顯示 b.example.com。似乎firefox以某種方式記憶體了b.example.com。如果我按 shift+reload,firefox 會載入正確的 a.example.com 站點。

這是 Firefox 特有的問題。以上內容與 Chrome、Vivaldi、MS Edge(基於 Chromium)完美配合。它甚至可以與 wget 一起正常工作。我不知道是什麼原因導致 Firefox 從其儲存中獲取錯誤的站點。

任何幫助都將不勝感激。

如果有人遇到同樣的問題:這是一個 firefox 錯誤,這裡有更多詳細資訊:https ://matthias.wuerfl.com/firefox-http2-ipv6-pitfall/

概括:

條件

  • 兩個(或更多)子域(同一個域)
  • …共享一個通用的萬用字元 ssl 證書
  • 在同一主機上(相同的 IPv4 地址)
  • 但使用不同的 IPv6 地址
  • 客戶端:Firefox(只有 Firefox 有此行為)
  • 使用 HTTP/2
  • 使用 IPv6

預期行為:

  • 位置欄中的 foo.example.com 顯示 foo.example.com
  • 位置欄中的 bar.example.com 顯示 bar.example.com

看到的行為

對第二台主機 (bar) 的請求轉到第一台主機 (foo)。

解釋

使用 HTTP/2 Firefox 共享與網路伺服器的連接(“池”),通過省略握手和 tcp 慢啟動來加速頁面載入。Firefox 不是通過查看主機名,而是通過查看 IPv4 地址和證書來確定哪些連接可以合併在一起。如果第二台主機 (bar) 的 IPv4 地址與第一台主機 (foo) 的 IPv4 地址匹配,並且用於 foo 的證書也與 bar 匹配,則到 foo 的連接將被重新用於 bar。

問題

當有人連接到 foo 的 IPv6 地址時,網路伺服器可能未配置為顯示 bar 的內容。對使用 IPv6 不再需要 SNI 和基於名稱的虛擬主機這一事實感到高興的網路伺服器管理員(如我)可能已經配置了他們的網路伺服器,錯誤的假設是如果為主機名 foo 傳入到該主機的連接發布了 IPv6 地址將轉到該 IP 地址。

Firefox 的行為非常出乎意料——或者根本就是錯誤的。

引用自:https://serverfault.com/questions/1054282