我有一个Rails应用程序,它产生了很多的图像; 即一个具有show动作的图像控制器从SAN获取图像并提供服务。 我有一个caches_page在这可靠地保存在自定义位置的文件的副本; RAILS_ROOT + / public / cache。 文件在那里,看起来不错。
我通过nginx服务的应用程序,它似乎工作正常,但对于我的生活,我不能让它发送这些caching的图像文件,而不是击中rails的行动。 我对nginx很新,并且已经研究了一段时间,但是无论我尝试什么都行不通 – 我正在做一些根本性的错误。
为了澄清,我有一个这样的乌里:
/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; }
您也可以使用Memcachedmodulee将图像直接缓存在Nginx上。
nginx的推荐方法是使用“try_files”指令
就像是
location /images/show { try_files $document_root/cache$uri; }