我有django应用,我的文件托管在Amazon s3
,网站位于Ec2
。
现在我的BW成本很高,因为从S3下载的数据过多。
现在在Digital ocean,我可以获得10美元的服务器,其中BW 2TB
是可用的。
我不想转移服务器,所以我想到一些我不确定是否有效的设置。
我希望当用户点击下载文件时,该请求应该转到some service
上的Digital ocean
,或者可能位于首先检查该文件是否在DG服务器上可用的同一服务器上。如果文件在那里,则DG应该提供文件以供下载,如果不存在,则将提供来自AWS S3
的文件,然后将其复制到DG服务器,以便下一个请求来自DG ocean服务器。所以我打算在那里使用20GB或更多空间来保存最常用的文件。
这样设置是否可行,或者有更好的方法来实现我想要的东西
我的网站是Django Python
答案 0 :(得分:0)
这取决于您的具体需求,但我认为这里最简单的解决方案是使用反向代理与缓存。
此课程 - 仅适用于您在亚马逊上拥有主文件并将DG
服务器视为非持久存储空间的情况。
Nginx在这里非常简单,可能足够强大。所以我会在你的情况下尝试:
(假设有人正在访问文件http://satic.your-site.com/image/example.jpg
)
DG
服务器这有很多优点,而且非常灵活。例如,如果您进行了大量更改并希望使缓存无效,只需清空相应的目录(也许是服务器的HUP)。
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=yoursite_cache:256m max_size=5G;
upstream yoursite_upstream {
server your-instance.s3.amazon.com:80 weight=1 fail_timeout=120s;
# works as well with multiple backends. just for reference, as not needed with s3
# server your-instance-2.s3.amazon.com:80 weight=1 fail_timeout=120s;
}
server {
listen *:80;
server_name satic.your-site.com;
access_log /var/log/nginx/satic.your-site.com.access.log;
error_log /var/log/nginx/satic.your-site.com.error.log info;
add_header X-Cache-Status;
location / {
proxy_ignore_headers "Set-Cookie";
proxy_read_timeout 600;
proxy_cache_valid 200 302 1440m;
proxy_cache_valid 404 1m;
proxy_cache yoursite_cache;
proxy_pass http://yoursite_upstream;
}
}