簡體   English   中英

如何使用django-sslify在我的Django + nginx + gunicorn網絡應用程序上強制https,並依賴Cloudflare的新免費SSL?

[英]How to use django-sslify to force https on my Django+nginx+gunicorn web app, and rely on Cloudflare's new free SSL?

介紹

Cloudflare現在免費提供SSL ,如果我不能在我的網站上利用這一點,那將是一個愚蠢的行為,並且在嘗試過程中打破一切的徹頭徹尾的傻瓜。

我可以很好地編寫應用程序代碼,但是當涉及到設置或配置https / nginx / gunicorn / etc / idon'tknowtheminminology時,我幾乎無法遵循Googled說明。

我想使用django-sslify在我的Django網絡應用程序上強制https。 考慮到以下已知事實,如何 在不破壞生活平衡的情況下 實現這一目標?

已知事實

  1. 我正在使用Django 1.7,在連接到(免費)Cloudflare DNS的DigitalOcean服務器上運行。 Django適合(服務?)與nginx和gunicorn。 基本上遵循本指南來完成所有設置。
  2. 訪問我的網站目前默認為常規的http://example.com標題。
  3. 手動訪問https://example.com使用綠色鎖和所有,但這會中斷所有表單提交錯誤“(403)CSRF驗證失敗。請求中止。”。
  4. 在我的Cloudflare網站設置中,域當前配置為“靈活SSL”。
  5. 嘗試在我現有的設置中使用django-sslify完全打破了一切,瀏覽器無法返回響應。
  6. 這個信息塊告訴我,當使用django-sslify和Cloudflare的SSL時,我應該使用“Full SSL”配置設置。
  7. 這里有猶豫的原因,提到需要20美元/月的Pro Cloudflare帳戶來處理SSL終止。 所以我真的不想搞砸了:/
  8. 在我的nginx和gunicorn配置中,只有一個提到“http”或“https”,特別是在我的nginx配置中:

location / { proxy_pass http://127.0.0.1:8001; ... } proxy_pass http://127.0.0.1:8001; ... }

好吧,我認為這就是我的全部

此外,我的服務器為Phonegap應用程序提供Django Rest Framework api,需要考慮嗎? 如果我需要提供附加信息,請告訴我,我會回復您。 謝謝你看看這個! :)

CloudFlare允許您啟用特定頁面規則 ,其中之一是強制SSL(通過執行硬重定向 )。 除了 django-sslifydjango-secure 之外,這是一件很棒的事情


除了設置SSL重定向之外,您還需要告訴Django處理安全請求。 幸運的是, Django為這樣做提供了一個不錯的指南 ,但有一些事情沒有提及,但我與nginx有關。

在Django設置中,您需要告訴Django如何檢測安全請求

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')

在您的nginx配置中,您需要設置X-Forwarded-Protocol標頭(並且X-Forwarded-For / X-Scheme標頭也很有用)。

proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

您還需要向下代理Host頭,因此Django能夠讀取正確的主機和端口,用於生成絕對URL和CSRF等。

proxy_set_header Host $http_host;

請注意,我使用$http_host變量而不是$host$host:$server_port 這將確保Django仍然會在非標准端口上遵守CSRF請求,同時仍然為您提供正確的絕對URL。

與大多數與nginx和gunicorn相關的事情一樣,YMMV在你做了幾次之后會變得更容易。

暫無
暫無

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

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