簡體   English   中英

Heroku上的Django SSL重定向:“重定向過多”

[英]Django SSL redirection on Heroku: 'Too many redirects'

我有一個使用自定義域名部署到Heroku的Web應用程序,該域名通過CloudFlare管理。

我要做的是將HTTP請求重定向到HTTPS

根據Django的文檔 ,將SECURE_SSL_REDIRECT設置為True之后,在通過自定義域訪問網站時,我遇到了Too many redirects (或site redirected you too many times )錯誤。

這是我的settings.py文件中的內容:

SECURE_SSL_REDIRECT = True
SECURE_PROXY_SSL_HEADER = ('X-Forwarded-Proto', 'https')

請注意,此重定向適用myapp.herokuapp.com域。

我在CloudFlare上使用DNS +代理,並且根據Heroku的文檔設置了SECURE_PROXY_SSL_HEADER

這是Heroku日志:

2019-04-17T11:21:08.514202+00:00 heroku[router]: at=info method=GET path="/" host=staging.mywebsite.com request_id=cf90ab0c-0895-4faf-aeea-5ee5fe5f970d fwd="115.87.132.194,172.68.242.176" dyno=web.1 connect=0ms service=2ms status=301 bytes=228 protocol=http

據我了解,“ Cloudflare”是它使用代理來使您的網站更快。 如果啟用了代理,則與heroku結合使用將導致“重定向過多”。

在此處輸入圖片說明

確保Cloudflare DNS中的雲未設置為橙色,並且在服務器之前不會使用代理。

您可以在heroku中設置SSL,請參見: https ://devcenter.heroku.com/articles/ssl-endpoint

Django修改了標頭的格式,因此“ X-Forwarded-Proto”變為“ HTTP_X_FORWARDED_PROTO”,因此在示例中,您應將'X-Forwarded-Proto'替換為'HTTP_X_FORWARDED_PROTO'

Django文檔中

請注意,標頭必須采用request.META所使用的格式-全部為大寫,可能以HTTP_開頭。 (請記住,在將標頭在request.META中可用之前,Django會自動在x標頭名稱的開頭添加“ HTTP_”。)

此確切的標頭也有一個示例。

設置一個包含兩個元素的元組-要查找的標頭名稱和所需的值。 例如:

 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

這告訴Django信任來自我們代理的X-Forwarded-Proto標頭,並且只要其值是'https',就可以保證請求是安全的(即,它最初是通過HTTPS傳入的)。

Django文檔中有關於SECURE_SSL_REDIRECT注釋,指出:

如果將其設置為True會導致無限重定向,則可能意味着您的網站在代理后面運行,並且無法確定哪些請求是安全的,哪些不是安全的。 您的代理可能會設置標頭以指示安全請求; 您可以通過找出該標頭是什么並相應地配置SECURE_PROXY_SSL_HEADER設置來糾正問題。

在嘗試了多種方法並始終收到“ Too Many Redirects”錯誤之后,我只是決定從CloudFlare進行所有重定向,並將其從我的Django App中刪除。

這是文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM