2017-03-06 55 views
0

我正在使用cloudflare的「靈活ssl」作爲客戶端和我的網站之間的中介。使用cloudflare flexible ssl選項會導致登錄表單刷新而不是發送請求

設置此功能後,我去了瀏覽器,並試圖通過HTTPS訪問我的網站:

https://example.com/login

和一切正常。我填寫了我的登錄信息併成功登錄,並沒有登錄http://example.com。我手動輸入https://example.com/*其中*是許多其他網頁,它都可以正常工作。

現在我想重定向所有請求,以使用看似正常工作的https。所以我去他們網站上的我的cloudflare帳戶,並創建一個頁面規則:http://example.com/*總是使用https。

現在我去example.com/login,併成功地重定向到https://example.com/login,我填寫我的登錄信息,並提交登錄表單,頁面刷新,我回到https://example.com/login一個空的登錄表單。

任何人都知道問題所在或者如何幫助排除故障?

我使用laravel作爲網站和Apache作爲網絡服務器的框架。

回答

1

創建一個頁面規則:http://example.com/ *爲始終使用https

注意到。請注意,CloudFlare通過接受http://example.com/ *上的每個HTTP請求並將301重定向返回到等效的HTTPS請求來完成此操作。瀏覽器通過向HTTPS URL發送GET請求來完成重定向。

我填寫我的登錄信息,並仔細提交登錄表單

檢查登錄表單源和檢查什麼網址登錄表單提交。我的猜測是表格被提交到http://example.com/login或類似的東西。 CloudFlare將接受http://example.com/login的POST請求,並返回301重定向到https://example.com/login - 您的瀏覽器將作爲GET請求完成,因此不會發送登錄數據。

因此,您最好的解決方案是確保您的登錄表單POST到正確的HTTPS URL而不是HTTP URL。

無論如何,這是我最好的猜測。

如何幫助排查故障?

確保您使用不同的日誌文件來區分服務器上的HTTP和HTTPS請求。

其他一些建議:

  • 得到一個讓我們加密的SSL證書,並把網站上的,這樣的CloudFlare和站點之間的通信是所有SSL。https://letsencrypt.org/
  • 確保已爲所有HTTPS請求啓用HSTS,以便瀏覽器知道不向任何HTTP URL發送任何請求。
  • 創建一個開發服務器,您可以在不使用CloudFlare的情況下,在瀏覽器和Web服務器之間使用HTTPS測試所有這些工作。一旦你在沒有CloudFlare的情況下以HTTPS模式工作,那麼你可以使用CloudFlare嘗試它,你應該得到基本相同的結果。你的問題在於HTTP - > HTTPS交換機,而不是專門用於CloudFlare。
相關問題