У меня есть картинки и для большего удобства пришлось использовать get запросы для формирования правильный уменьшенных копий.
К примеру /image.jpg?w=100&h=200&out=thumb
Чтобы отловить такие запросы в nginx прописан map, который по запросу формирует путь к картинке
map $args $imgdir {
default "/image";
~^w=(\d+)&h=(\d+)&out=(small|thumb) "/tmp/h$2";
}
Далее nginx проверяет есть ли файл, если есть выводит, если нет, то отправляет в обработчик для создания копии.
location ~ ^/image/(?<imgfile>.+\.(jpg|JPG|jpeg|JPEG|png|PNG|webp|WEBP))$ {
root $root;
add_header Cache-Control "public, max-age=315360000";
try_files $imgdir/$imgfile @image;
}
location @image {
expires 1y;
rewrite ^/image/(.*)$ /image?$args&image=$1? last;
}
Мне необходимо сделать еще одно действие, которое изменяет путь до файла и пока не знаю как это сделать.
Я хочу некоторые картинки предоставлять в размытом виде, добавив в запрос &blur=true, что поможет мне отловить в обработчике GET запрос и создать копию в папке blurs
По факту путь доя картинки будет таким /image.jpg?w=100&h=200&out=thumb&blur=true
Мне нужно как то в map реализовать формирование пути в случае если blur отсутствует то оставить все как есть
~^w=(\d+)&h=(\d+)&out=(small|thumb) "/tmp/h$2";
Если же присутствует то
~^w=(\d+)&h=(\d+)&out=(small|thumb)&blur=true "/tmp/h$2/blurs";
Отдельный map для этого создавать?