配置 nginx 以提供缓存的图像

Posted

技术标签:

【中文标题】配置 nginx 以提供缓存的图像【英文标题】:Configure nginx to serve cached images 【发布时间】:2010-12-08 22:21:54 【问题描述】:

我有一个生成大量图像的 Rails 应用程序;即,具有显示操作的图像控制器从 SAN 中获取图像并为其提供服务。我有一个 caches_page ,它可靠地将文件的副本保存在自定义位置; RAILS_ROOT + /公共/缓存。文件在那里,看起来不错。

我正在通过 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;
      

【问题讨论】:

serverfault.com/questions/262995/…serverfault.com/questions/263223/… 【参考方案1】:

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

【讨论】:

【参考方案2】:

nginx 的推荐方式是使用 the "try_files" directive

类似

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

【讨论】:

try_files 是一个很好的方法(比 if 语句更好。)但我认为该指令应该是 try_files $document_root/cache$uri $uri; 因此如果找不到缓存的图像,它会回退到请求的 uir。跨度> @myanimal 确定,已修复

以上是关于配置 nginx 以提供缓存的图像的主要内容,如果未能解决你的问题,请参考以下文章

Nginx优化与防盗链

Nginx优化与防盗链

Nginx优化--网页压缩与缓存时间

Nginx配置缓存服务器

Nginx使用教程:使用Nginx缓存之Memcached缓存

Nginx服务优化之隐藏版本号修改用户与组配置页面缓存与时间日志分割以及设置连接超时