我有一个django/mezzanine/django-累计项目,它使用rackspace cloudfiles CDN作为媒体存储。如果存在本地MEDIA_ROOT的所有静态文件,我想自动提供它们,如果它们不存在,则只返回到CDN。
一种可能的方法是使用标记在模板级别管理回退。不过,我不想仅仅为了这个而重写所有的管理模板(例如)。
是否有一种方法可以修改所有媒体的处理,以便首先使用一个存储引擎,然后在出错时切换到另一个存储引擎?
发布于 2014-02-28 00:56:28
根据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的/静态/ URI的任何请求重定向到CDN。然而,django积云仍然通过CDN呈现到静态文件的链接。为了解决这个问题,我将以下内容添加到settings.py的积木块中:
CUMULUS {
# ...
'CONTAINER_URI': 'http://example.com/static',
}现在,django-累计链接使用本地服务器的静态URI,这将击中上面的nginx配置,并且只在必要时重定向到CDN。万岁!
发布于 2014-02-27 23:57:05
最好的方法是让这个工作,是有一个不同的web服务器服务于您的所有媒体(我使用了nginx)。然后设置一个负载均衡器来检测故障,并在发生故障时将所有请求重定向到CDN。您可能需要弄清楚的一件事是图像路径。(如果需要的话,使用HAProxy重写请求URL )
https://stackoverflow.com/questions/22082005
复制相似问题