У меня есть приложение 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;
}