【发布时间】:2017-04-18 22:58:58
【问题描述】:
我在使用 Django 1.10、uWSGI 和 Nginx 提供静态文件时遇到困难。
我有一个 index.html 文件,其中包含 CDN。
Django 文档here 说“将静态文件传输到存储提供商或 CDN”。 “转移到 CDN”是什么意思? CDN不是你获取文件的地方吗?
settings.py 包含,
STATIC_URL = '/static/'
STATIC_ROOT = 'nonAppBoundStaticDirectory'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
跑步
$ python manage.py collectstatic
这会将所有 CDN 都放在我的目录“nonAppBoundStaticDirectory”中吗?
如果是这样,那么我如何在模板中使用它?
摘自 index.html
<!-- Bootstrap -->
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/css/bootstrap.min.css">
来自 /etc/nginx/nginx.conf 的摘录
server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name example.com; # substitute your machine's IP address or FQDN
charset utf-8;
#Max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/ofey/djangoForum/fileuploader/uploaded_files; # your Django project's media files
}
location /static {
alias /home/ofey/djangoForum/noAppBoundStaticDirectory; # your Django project's static files
}
........
谢谢,
【问题讨论】:
-
对于较大的网站,最好也从 cdn 提供您的自定义 css、js 等,就像您使用第三方引导资产一样。但是在您的情况下,您不使用 cdn 来管理自己的静态资产。所以django存储后端只是将文件复制到应用服务器上的其他地方,nginx可以直接为它们提供服务。
-
所以 django 不会从 CDN 中拉取任何文件来保存在本地。但是,如果您使用 CDN
STATICFILE_STORAGE,django 的collectstatic会将您的 自己的 自定义资产从STATICFILE_DIRS上传到远程 CDN 服务器。例如亚马逊云端。不过,您必须使用有效的 api 密钥配置静态文件后端才能正常工作。此外,模板标签{% static %}将创建一个 URL,指向您的资产从 CDN 提供的位置。 -
在这种情况下,您需要解释什么不起作用以及您希望它如何起作用。 minimal reproducible example
-
您通常会将静态文件复制到由 nginx 提供服务的目录中。所以你的
STATIC_ROOT值应该是该目录的绝对路径(以/开头)。与您在 nginx 配置中使用的相同。如果 nginx 无法提供这些文件,请确保 nginx 进程对该目录具有读取权限。 -
阅读此问题后,我觉得您对 CDN 是什么感到困惑。这是一项您付费的服务,它获取您的文件,将它们存储在自己的服务器上,并为您提供服务。您不能拥有“包含 CDN”的 index.html:这根本没有意义。
标签: django nginx cdn uwsgi django-staticfiles