我有一个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;
}
答案 0 :(得分:3)
您还可以使用MemcachedModule直接在Nginx上缓存图片。
答案 1 :(得分:3)
nginx使用的推荐方法 the "try_files" directive
类似
location /images/show {
try_files $document_root/cache$uri;
}