使用 Varnish+Apache 將登錄使用者重定向到 https,匿名到 http
我在 Drupal 前面的 Apache 前面有一個帶有 Varnish 的伺服器。
我想做的是將我的登錄表單重定向到 https(很簡單),然後將所有登錄(經過身份驗證的)使用者始終重定向到 https,同時讓匿名訪問者始終重定向到 http(出於性能原因) .
如果經過身份驗證的使用者點擊指向http://mysite.com/some/page ->的絕對連結,我不希望經過身份驗證的使用者具有混合模式體驗,因此這就是在協議不是時始終將經過身份驗證的使用者重定向到 https 的原因HTTPS。
是否可以使用 Varnish + Apache 配置的某種組合來做這樣的事情?或者是這裡唯一為所有訪問者始終使用 https 的解決方案(這對所有匿名訪問者來說都是不必要的性能損失)。
作為參考,我正在使用基於四個廚房提供的這個預設 Drupal 敏感範例的 Varnish vcl:https ://fourkitchens.atlassian.net/wiki/display/TECH/Configure+Varnish+3+for+Drupal +7
您正在嘗試做的事情很難做到正確。如果您在使用 http 和使用 https 時犯了錯誤,則可能會引發許多安全問題。
我的建議是在 apache 中配置一個 http 虛擬伺服器,它重定向到相同的 https URL 並且不執行任何其他操作。它甚至不必確定 URL 是否存在,它只是一直重定向。然後有另一個 https 虛擬伺服器,它有網站的真實內容。
請記住將所有 cookie 標記為安全,這樣您就不會在 http 連接上洩漏 cookie。
如果您確實堅持通過 http 為未登錄的使用者響應。那麼您將需要一個不安全的 cookie,它告訴使用者是否已登錄。不要將任何數據放入此 cookie,只儲存使用者是否登錄。您可以使用 0 或 1 作為儲存值。或者您可以使用一個常量值,在這種情況下,cookie 存在意味著使用者已登錄,而不存在意味著使用者未登錄。
如果滿足這兩個條件中的任何一個,則在 http 端,您將重定向到 https。有一個 cookie 指示使用者已登錄或請求 URI 需要登錄。收到 https 請求後,您必須進行額外檢查以驗證使用者是否真正登錄。為此,您使用安全 cookie,外人無法猜到。如果發現使用者未登錄,則重定向回 http,如果 URL 不需要登錄,則在此階段指示瀏覽器刪除不安全的 cookie,該 cookie 錯誤地指示使用者已登錄。
確保不記憶體這些重定向非常重要。您絕對不希望瀏覽器記憶體從 URL 的 http 版本到 https 版本的重定向,反之亦然。