簡體   English   中英

Django SSL證書和靜態媒體

[英]Django SSL cert and static media

我正在構建一個Django應用,該應用在所有面向用戶的頁面上都需要SSL。 在需要SSL的其他項目中,當從同一服務器上的不同虛擬主機提供媒體文件時,我遇到了麻煩。 例如,頁面為: https : //www.mysite.com,但它引用的是http://media.mysite.com/css/screen.css ,瀏覽器隨后向用戶顯示安全警告。

我的理解是,Django的最佳做法是將靜態文件至少保留在其自己的虛擬主機上,據我所知,這需要一個子域,如media.blahblah.com。

顯然,有很多基於SSL的Django應用程序,因此我必須缺少一些東西。 關於如何管理的任何建議?

普遍的答案是,您需要將用於引用靜態文件的URL更改為使用HTTPS的URL。 使用相對路徑(/static/css/screen.css)而不是絕對URL(http:// ...)會使您的媒體根據引用頁面自動從HTTP切換到HTTPS,但是在嘗試時確實會迫使您動手根據下文所述的最佳做法進行投放。

如果您將Django 1.3與contrib.staticfiles一起使用,則似乎只需要更改STATIC_URL設置即可。 如果不是,則必須手動更新路徑(或者,您要指定靜態資產)。

諸如CSS和JavaScript之類的靜態媒體的最佳實踐確實規定,您應該從與服務Django頁面的服務器不同的網絡服務器 (而不僅僅是虛擬主機)為它們提供服務。 當時的想法是,您可以使用占用資源少的Web服務器來非常快速地提供那些簡單文件。 如果您從運行Django站點的同一台Web服務器上為它們提供服務,則很可能會加載許多額外的模塊,但不會用於僅提供靜態文件的請求。

由於需要提供安全的靜態文件,因此有兩種選擇:

  1. 您將需要為靜態文件Web服務器獲取單獨的(或通配符)SSL證書。
    • 缺點 :證書的額外費用
    • 缺點 :您必須指定其他域(而不是第一段中描述的相對路徑)來提供靜態文件。
  2. 在處理您站點的所有請求的反向代理上設置SSL。 您仍在從單獨的Web服務器提供靜態文件和Django頁面,但是代理基於URL或路徑知道要連接到哪個文件(例如:來自靜態Web服務器的代理“ / static”,來自Django Web服務器的所有其他代理) 。
    • 專業版 :允許您使用媒體的相對路徑。
    • 缺點 :額外的系統配置。

暫無
暫無

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

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