Настройте nginx для статического кэширования определенных URL-адресов

Я хочу кэшировать определенные URL-адреса в своем приложении, напрямую просматривая статические файлы. Однако статически кэшированные файлы могут не существовать, поэтому я хочу только перенаправить запрос, если файлы существуют. Я предполагаю, что могу как-то использовать try_files, но до сих пор мне не удалось это сделать правильно.

Вот что я пробовал:

location ^/(.*)/(.*)/other/stuff/(.*)/this-is-static {
 try_files /static-cache/$1/$2/$3/this-is-static @app;
}

static-cache - это внутреннее местоположение, настроенное в том же файле. Кажется, что это работает не так, как предполагалось. Что не так?

Самое близкое, что я получил, это то, что перезаписывает каждый запрос (и, таким образом, он не работает, когда файл не кэшируется):

location ^/(.*)/(.*)/other/stuff/(.*)/this-is-static {
 rewrite ^ /static-cache/$1/$2/$3/this-is-static;
}
1 ответ

Вы пытались использовать ~?, я также использовал [^/], чтобы избежать жадного регулярного выражения

location ~ /([^/]*)/([^/]*)/other/stuff/([^/]*)/this-is-static {
 try_files /static-cache/$1/$2/$3/this-is-static @app;
}
location @app {
 #handle non cached files
}

licensed under cc by-sa 3.0 with attribution.