配置nginx以提供缓存的图像

时间:2009-10-22 00:31:56

标签: nginx

我有一个Rails应用程序,可生成大量图像;即具有show动作的图像控制器从SAN获取图像并为其提供服务。我有一个caches_page,可以在一个自定义位置可靠地保存文件的副本; RAILS_ROOT + / public / cache。文件在那里,看起来很好。

我通过nginx服务该应用程序,它似乎工作正常,但对于我的生活我不能得到它发送那些缓存的图像文件,而不是点击rails动作。我对nginx很新,并且已经研究了一段时间了,但无论我尝试什么都行不通 - 我做的事情根本就是错误的。

为了澄清,我有一个这样的uri:

/images/show/123.jpg

该文件可能存在于此处:

/cache/images/show/123.jpg

如何让nginx提供该文件而不传递请求?

以下是我尝试过的不完整列表:

if (-f /cache$request_filename) { 
  rewrite (.*) /cache$1 break;
  break; 
}

if (-f /cache$uri.jpg) {
rewrite (.*) /cache$1.jpg break;
}

if (-f /cache/images/show/$request_filename) {
rewrite (.*) /cache/images/show/$1.jpg break;
}

有什么想法吗?

更新:我回答了我自己的问题。正确的规则是:

      if (-f $document_root/cache$request_uri) {
      rewrite (.*) /cache$1 break;
      }

2 个答案:

答案 0 :(得分:3)

您还可以使用MemcachedModule直接在Nginx上缓存图片。

答案 1 :(得分:3)

nginx使用的推荐方法 the "try_files" directive

类似

location /images/show {
    try_files $document_root/cache$uri;
}
相关问题