Как правильно написать правило для NGINX?

Запутался немного. Как лучше сделать?


Есть запрос вида:
http://site.ru/getfile?type=1&code=2&dir=main&name=image.jpg



Как правильно написать блок location для обработки таких обращений, что бы файл отдавался не скриптом, а самим nginx'ом?

т.е. брал из запроса значение параметра main и имя файла name, проверял есть ли такой файл и отдавал. Если нет, то передает управление другой секции, где вызывается скрипт, который содает файл.


Еще момент, имя файла может быть завернуто в base64
  • Вопрос задан
  • 4054 просмотра
Пригласить эксперта
Ответы на вопрос 4
BuriK666
@BuriK666 Куратор тега Nginx
Компьютерный псих
Как-то так:
location /getfile {
  try_files $arg_dir/$arg_name @genfile;
}
locaiton @genfile {
  ......
}

и в @genfile отдавать новый файл с помощью X-Accel-Redirect
Если имя в base64, то в @genfile можно декодировать и опять же послать с помощью X-Accel-Redirect
Ответ написан
Комментировать
Для раскодировани base64 можно использовать модуль к nginx github.com/agentzh/set-misc-nginx-module и его команду set_decode_base64 $b $a;
Ответ написан
Комментировать
grossws
@grossws
Можно попробовать сделать rewrite с regexp'ом, который вытащит значение параметров. А дальше использовать try_files.

Здесь wiki.nginx.org/Pitfalls есть описание этого паттерна.

На тему base64 — можно файлы хранить с именами сразу в base64, если к ним так обращаются.
Ответ написан
Комментировать
@Push_Ok
таким способом надо более точно регулярку писать на имя файла, а то так можно дать возможность код приложения скачать
Ответ написан
Ваш ответ на вопрос

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

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