【问题标题】:How can i make caching server on different host in django如何在 django 的不同主机上制作缓存服务器
【发布时间】:2014-03-15 04:56:20
【问题描述】:

我有 django 应用程序,我的文件托管在 Amazon s3 上,网站位于 Ec2 上。

现在我的 BW 成本很高,因为从 S3 下载了太多数据。

现在在数字海洋中,我可以花 10 美元获得服务器,其中 BW 2TB 可用。

我不想转移服务器,所以我正在考虑一些我不确定是否有效的设置。

我希望当用户单击下载文件时,该请求应该转到Digital ocean 上的some service,或者可能位于首先检查文件是否在 DG 服务器上可用的同一台服务器上。如果文件存在,则 DG 应提供文件以供下载,如果不存在,则将提供来自 AWS S3 的文件,然后将其复制到 DG 服务器,以便下一个请求将来自 DG 海洋服务器。所以我打算在那里使用 20GB 或更多空间来保存最常用的文件。

这样的设置是否可行,或者有更好的方法来完成我想要的

我的网站是Django Python

【问题讨论】:

  • 为什么不呢?什么事拦住你了?我想不出任何可以...someserver.com/?file=http://amazonlink.com - 检查所述链接是否存储在本地,否则从亚马逊拉取。
  • @Yuji'Tomita'Tomita 谢谢。实际上我没有做过类似的事情。所以首先我要确认它是否可能。你能指出我应该如何处理它的一些问题吗
  • 您可以设置 nginx 以在本地查找文件,然后在应用程序不存在时回退到应用程序(这是带有 try_files 的常见 nginx 设置)。然后,该应用程序可以从路径中获取 URL 参数或获取参数,然后从 Amazon 中提取文件并放置在 nginx 路径中。下一个命中将由 Nginx 提供。

标签: python django amazon-web-services amazon-s3 digital-ocean


【解决方案1】:

这取决于您的具体需求,但我认为这里最简单的解决方案是仅使用带有 缓存反向代理

这 - 当然 - 仅适用于您的 main 文件在 amazon 上,并且将您的 DG 服务器视为非持久存储。

Nginx 在这里非常简单,而且可能足够强大。所以我会在你的情况下尝试:

(假设有人正在访问文件http://satic.your-site.com/image/example.jpg

  • '静态'请求,由 Nginx 在DG 服务器上处理
  • Nginx 将检查内容是否在其缓存中
  • 如果是,则直接从 nginx 缓存传递响应
  • 如果否,Nginx 会从上游服务器加载响应

这有很多优点,而且非常灵活。例如,如果您做了很多更改并想要使缓存无效,只需清空相应的目录(可能还 HUP 服务器)。

简单的 nginx 配置示例:

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;
    }
}

【讨论】:

  • your-instance.s3.amazon.com 应该是 your-bucket-name.s3.amazonaws.com(= amazonAWS.com,而不是 amazon.com)。 yoursite_upstream 也应命名为 your-bucket-name.s3.amazonaws.com。此外,add_header X-Cache-Status 不起作用(“add_header”指令中的参数数量无效)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2014-04-08
  • 1970-01-01
  • 2015-02-19
  • 2011-06-23
  • 2019-10-23
  • 1970-01-01
相关资源
最近更新 更多