我如何设置一个 nginx 缓存策略,首先尝试 amazon s3,然后尝试 memcache,并在未命中时进行回退?

我如何设置一个 nginx 缓存策略,首先尝试 amazon s3,然后尝试 memcache,并在未命中时进行回退?

我有一个大型网站,其中有很多几乎从不改变的页面,现在我正在使用两个 memcache 服务器(amazon elasticache),但这真的很昂贵。

这就是为什么对于这些​​几乎从未改变的文件,我想将它们上传到 amazon s3 并关闭 1 个 memcache 服务器。

这是我的会议;

location ~ /longterm/(.*){
   proxy_pass http://amazonS3bucket;
   proxy_intercept_errors on;
   proxy_next_upstream http_404;
   error_page 404 503 = @fallback_memcached
}

location @fallback_memcache {
   set $memcached_key $uri;
   memcached_pass     name:11211;
   error_page         404 @fallback;
}

location @fallback {
   try_files $uri $uri/index.html
}

我不知道为什么,但是配置在最终的回退中不起作用;如果我得到一个 amazon S3 命中它就可以起作用,如果我得到一个 amazon S3 未命中和一个 memcache 命中它就可以起作用,但是如果我得到一个 amazon S3 未命中然后一个 memcache 未命中,当它尝试解决最后的回退时它就会失败。

我也在考虑使用亚马逊 s3 fusehttp://code.google.com/p/s3fs/我认为使用代理传递会更容易实现,但性能也会降低?

答案1

仅引述官方文档

递归错误页面

默认: recursive_error_pages off;

启用或禁用使用指令进行多次重定向error_page

相关内容