配置nginx以提供缓存图像

配置nginx以提供缓存图像,nginx,Nginx,我有一个Rails应用程序,可以生成很多图像;ie具有显示操作的图像控制器从SAN获取图像并为其提供服务。我有一个caches_页面,可以可靠地将文件副本保存在自定义位置;RAILS\u ROOT+/public/cache。文件在那里,看起来很好 我通过nginx提供应用程序,它似乎工作得很好,但就我的一生而言,我无法让它发送那些缓存的图像文件,而不是点击rails操作。我对nginx非常陌生,已经研究了一段时间,但不管我尝试什么,它都不起作用-我做了一些根本错误的事情 为了澄清,我有这样一个

我有一个Rails应用程序,可以生成很多图像;ie具有显示操作的图像控制器从SAN获取图像并为其提供服务。我有一个caches_页面,可以可靠地将文件副本保存在自定义位置;RAILS\u 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;
      }

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

您也可以使用直接在Nginx上缓存图像。

建议使用

差不多

location /images/show {
    root ...;
    try_files $document_root/cache$uri /fromrootpath/$uri;
}

nginx的推荐方式是使用

差不多

location /images/show {
    root ...;
    try_files $document_root/cache$uri /fromrootpath/$uri;
}

try\u files
是一个好方法(比if语句更好),但我认为指令应该是
try\u files$document\u root/cache$uri$uri
因此,如果找不到缓存的图像,它会返回到请求的uir。@myanimal当然,修复了
try_files
是一个很好的方法(比if语句更好)。但我认为该指令应该是
try_files$document\u root/cache$uri$uri
因此,如果找不到缓存的图像,它将返回到请求的uir。@myanimal确定,已修复