Django媒体的多个存储引擎:首选本地,回退到CDN

2024-04-28 03:05:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django/mezzanine/django cumulus项目,它使用rackspace cloudfiles CDN进行媒体存储。我想自动提供来自本地媒体根目录的所有静态文件(如果存在的话),并且只有在不存在的情况下才回退到CDN URL。在

一种可能的方法是使用标记在模板级别管理回退。我宁愿不必覆盖所有的管理模板(例如)只是为了这个,然而。在

有没有一种方法可以修改对所有媒体的处理,使其首先使用一个存储引擎,然后在出错时切换到另一个存储引擎?在


Tags: 文件项目django方法引擎模板静态情况
2条回答

根据Anup的建议,我发现nginx配置可以很好地处理404条件:

location /static/ {
    root            /path/to/static_root;
    # ...
    error_page 404 =  @cdn;
}

location @cdn {
    # cdn_cname.example.com is an alias for deadbeef012345.r99.cf5.rackcdn.com
    rewrite ^/(.*)$ http://cdn_cname.example.com/$1 last;
}

这将正确地将对本地服务器上返回404的/static/URI的任何请求重定向到CDN。但是,django cumulus仍然通过CDN呈现到静态文件的链接。为了解决这个问题,我在设置.py公司名称:

^{pr2}$

现在,django cumulus链接使用本地服务器的静态URI,它将命中上面的nginx配置,并且只在必要时重定向到CDN。万岁!在

最好的方法就是让它正常工作,就是让一个不同的web服务器为您的所有媒体提供服务(我使用nginx)。然后设置一个负载平衡器来检测故障,并在发生故障时将所有请求重定向到CDN。 您可能需要弄清楚图像路径(如果需要,请使用HAProxy重写请求URL)

相关问题 更多 >