Настройка nginx для обслуживания кешированных изображений

У меня есть приложение Rails, которое генерирует много изображений; т.е. контроллер изображений с действием show извлекает изображение из SAN и обслуживает его. У меня есть страница caches_page, которая надежно сохраняет копию файла в настраиваемом месте; RAILS_ROOT +/public/cache. Файлы есть и выглядят нормально.

Я обслуживаю приложение через nginx, и, похоже, он работает нормально, но для жизни я не могу заставить его отправлять эти файлы кешированных изображений, а не ударять по рельсам. Я новичок в 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;
}

Любые идеи?

update: Я ответил на свой вопрос. Правильное правило:

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

Ответ 1

Вы также можете кэшировать изображения непосредственно на Nginx, используя MemcachedModule.

Ответ 2

рекомендуемый способ для nginx - директива try_files

что-то вроде

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