Nginx — реакция на ответ восходящего потока

Я использую nginx в качестве обратного прокси для загрузки файлового хранилища с внешним провайдером. Когда я обрабатываю загрузку файла, мне нужно отслеживать (в моей базе данных), была ли загрузка успешной, прежде чем возвращать ответ пользователю. Поэтому я хотел бы использовать метод ngx.location.capture, предоставленный в модуле lua-nginx, чтобы поговорить с моим сервером о результате запроса. Поскольку мне нужно дождаться ответа вышестоящего сервера, я могу выполнить захват только в header_filter_by_lua. К сожалению, я не могу установить какую-либо внешнюю связь в header_filter_by_lua. ngx.location.capture, ngx.socket.* и ngx.exec доступны только тогда, когда ответ еще не пришел.

Как я могу реагировать на восходящий ответ в nginx?

Другие подходы, о которых я думал:

  • Пусть скрипт просматривает журнал доступа, а затем выдает запрос на завивку. (Кажется, должен быть более простой способ)
  • Первоначально отправьте файл через ngx.location.capture в content_by_lua (я не думаю, что это справится с размером файла до 5 ГБ)

Помощь приветствуется :)


person Niels-Ole    schedule 23.01.2016    source источник
comment
Я обошел это ограничение, используя os.execute("curl [...]") Это кажется неправильным, но работает. Остерегайтесь передачи пользовательского ввода в оболочку!   -  person Niels-Ole    schedule 24.01.2016


Ответы (1)


использовать для /upload местоположения: content_by_lua_file с resty.upload модулем

person Vyacheslav    schedule 25.01.2016
comment
хорошее предложение. Это само по себе не позволило бы мне полностью отправить тело запроса вверх по течению, но я обнаружил https://github.com/pintsized/lua-resty-http, который должен разрешить загрузку больших объемов. Таким образом, я также могу более постепенно и программно определять свой ответ клиенту в Lua. - person Niels-Ole; 26.01.2016
comment
@ user2474697, это хороший способ, но помните, что у него есть некоторые проблемы с https. Я не нашел решения для определения правильных секретных ключей. - person Vyacheslav; 26.01.2016