У меня есть программа, которая создает оптимизированные версии картинок, загруженных в папку /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? В большинстве подобных случаев, которые я нашел, все кэшированные/оптимизированные файлы хранятся в одной папке с кэшем, в отличие от структуры, которую я описываю.
Вы можете использовать регулярное выражение location
для извлечения первой и второй частей URI. Используйте оператор try_files
для поиска в файловой системе каждого файла по порядку.
Например:
location ~ ^(/images/.*?)([^/]+)$ {
try_files $1.optimized/$2 $1$2 =404;
}