NGINX перенаправляет на кэшированный файл в подпапке

У меня есть программа, которая создает оптимизированные версии картинок, загруженных в папку /images/ на веб-сервере. Она просматривает подпапки и в каждой из них создает папку .optimized, в которой хранится оптимизированная версия, если она хотя бы на определенный размер меньше оригинала. Моя цель - проверить, существует ли такая оптимизированная версия, обслужить ее, если она существует, и обслужить оригинал в противном случае (в некотором смысле, как gzip_static обслуживает .gz версию файла, если она существует).

Я использую NGINX в качестве прокси перед Apache, поэтому, хотя я привык решать подобные вопросы с помощью htaccess, я пытаюсь сделать это в NGINX, чтобы серверу не пришлось передавать запрос Apache. В .htaccess я мог бы сделать что-то вроде этого:

RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [OR]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]

Есть ли хороший способ сделать это непосредственно в NGINX? В большинстве подобных случаев, которые я нашел, все кэшированные/оптимизированные файлы хранятся в одной папке с кэшем, в отличие от структуры, которую я описываю.

3
задан 6 July 2021 в 08:43
1 ответ

Вы можете использовать регулярное выражение location для извлечения первой и второй частей URI. Используйте оператор try_files для поиска в файловой системе каждого файла по порядку.

Например:

location ~ ^(/images/.*?)([^/]+)$ {
    try_files $1.optimized/$2 $1$2 =404;
}
3
ответ дан 28 July 2021 в 11:51

Теги

Похожие вопросы