ms-dred
@ms-dred
Вечно что то не то и что то не так...

Почему nginx не находит файла и отправляет запрос в обработчик?

Где то допустил ошибку и не могу сам разобраться.
У меня есть обработчик на node.js который создает уменьшенные копии картинок и доступен по адресу
/image?fit=resize&w=200&display=thumb&domain=site&image=90/pic.jpg

Так он создает уменьшенную копию в директорию на сервере
/var/www/server/public/tmp/site/w200/90/pic.jpg

Задача для Nginx просто отдать файл если он уже существует и не отправлять данные в обработчик, и тут у меня где то косяк.

В nginx.conf имеется map
map $arg_auto:$arg_fit:$arg_h:$arg_w:$arg_display:$arg_domain $image_path_file {
        default "/o";

        ~^:(?<fit>resize|crop)::(?<width>(\d+)):(?<display>(low|thumb|large)):(?<domain>([a-z0-9.]+))$  "/public/tmp/$domain/w$width";

       ~^:(?<fit>resize|crop):(?<height>(\d+))::(?<display>(low|thumb|large)):(?<domain>([a-z0-9.]+))$  "/public/tmp/$domain/h$height";
}

По задумке при обращении к картинке по адресу
Site/o/pic.jpg?auto=cache&fit=resize&w=200&display=thumb&domain=large
Nginx должен отдать статику, если статики нет, отправить в обработчик
в location имеются следующие правила
server {
    server_name SITE;
    listen ip:443 ssl http2;

    set $root /var/www/server;

    set $imgpath /domain1/o;
    set $imgpath1 /domain2/o;
    set $imgpath2 /domain3/o;
    set $imgpath3 /domain4/o;


    root /var/www/server;


    location ~ ^/o/(?<folder_image_file>.+\.(jpg|JPG|jpeg|JPEG|png|PNG|webp|WEBP|gif|GIF))$  {
        add_header Cache-Control "public, max-age=315360000";

       try_files $image_path_file/$folder_image_file $chunk_folder$imgpath3/$folder_image_file $chunk_folder$imgpath2/$folder_image_file $chunk_folder$imgpath1/$folder_image_file $chunk_folder$imgpath/$folder_image_file  @image;
    }

    location @image {
        expires 1y;
        rewrite ^/o/(.*)$ /image?$args&image=$1? last;
    }

}


Не обращайте внимание на $chunk_folder, он в случае неправильных переданных параметров содержит "../", что позволяет взять фулл картинку с другой папки.

Я вот не понимаю в чем дело, с путями до файла где то накосячил или что? =)
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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