Задать вопрос
ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как в моем случае правильно обработать статику в Nginx?

Привет всем.
На сервере есть 5 папок
/var/www/static/
/var/www/static1/
/var/www/static2/
/var/www/static3/
/var/www/staticHandle

4 первых папки содержать фотки раскиданные по директориям, а staticHandle занимается их обработкой, ресайзом, подгонкой, выводом в браузер и т.д.

К примеру при обращении staticHandle.ru/photos/image.jpg?width=300x400&folder=static2
staticHandle принимает ширину и высоту до которой нужно уменьшить фото, а так же folder содержит папку в которой находится это фото. Т.е. взять фото из папки /var/www/static2/photos/image.jpg и уменьшить его до width и height
Тут все работает отлично.
Вот конфиг location

location ~ ^/photos/(?<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 ^/photos/(.*)$ /image?$args&image=$1? last;
    }


С генерацией уменьшенных фоток все отлично работает, но проблема заключается в том что если не передан GET запрос, то Nginx все равно отправляет его в обработчик, а мне нужно чтобы в таких случаях искались оригиналы файлов во всех 4 папках последовательно

/var/www/static/
/var/www/static1/
/var/www/static2/
/var/www/static3/

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

Другими словами, мне нужно оставить все как есть при обращении на URL staticHandle.ru/photos/image.jpg?width=300x400&folder=static2
А в случае если идет запрос на staticHandle.ru/photos/image.jpg
Попробовать найти файл в папках
/var/www/static/photos/image.jpg
/var/www/static1/photos/image.jpg
/var/www/static2/photos/image.jpg
/var/www/static3/photos/image.jpg
и отдать его как статику Nginx'ом

На сервере самим обработчиком найти и отдать файл проблем нет, но хочется чтобы все это добро Nginx отдавал.
Ранее когда все 4 папки были закреплены за 4мя поддоменами с этим проблем не было, а теперь появился еще один поддомен, который будет управлять всем добром и он не может найти файл так как ищет его сугубо в папке /var/www/staticHandle/photos/image.jpg, а сам файл может находится в других папках.
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Простой 10 комментариев
Решения вопроса 1
@dodo512
Полный путь к файлу формируется из значения root и строки в try_files.
Если root /var/www/staticHandle, то в try_files нужно передать "/../static/photos/image.jpg".
В $uri уже есть "/photos/image.jpg" осталось добавить "/../static".

try_files $imgdir/$imgfile /../static$uri /../static1$uri /../static2$uri /../static3$uri @image;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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