gpt4 book ai didi

Django SSL 证书和静态媒体

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:26 24 4
gpt4 key购买 nike

我正在构建一个 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 设置。如果没有,您将必须手动更新路径(或者您指定的静态 Assets )。

静态媒体(如 CSS 和 JavaScript)的最佳实践确实规定您应该从与提供 Django 页面的服务不同的网络服务器(不仅仅是虚拟主机)提供它们。那里的想法是您可以使用低占用空间的网络服务器非常快速地为这些简单文件提供服务。如果您从运行 Django 站点的同一个网络服务器为它们提供服务,那么很可能会加载一些额外的模块,但不会用于您只是提供静态文件的请求。

由于您需要提供安全的静态文件,您有几个选择:

  1. 您需要为您的静态文件网络服务器获取一个单独的(或通配符)SSL 证书。
    • 缺点:证书的额外费用
    • 缺点:您必须指定一个不同的域(而不是第一段中描述的相对路径)来提供您的静态文件。
  2. 在处理您站点的所有请求的反向代理上设置 SSL。您仍然从单独的网络服务器提供静态文件和 Django 页面,但代理知道根据 URL 或路径连接到哪个(例如:来自静态网络服务器的代理“/static”,所有其他来自 Django 网络服务器) .
    • Pro:是否允许您使用媒体的相对路径。
    • 缺点:额外的系统配置。

关于Django SSL 证书和静态媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com