@toboe_kacuragi

Как асинхронно выполнить код Lua в location Nginx?

Привет всем!

Проблема в следующем:

Есть обычный location, который обрабатывает входящие запросы. Потребовалось добавить счетчик в табличку mysql, который учитывает некоторые параметры из request_uri для данного location.
В итоге счетчик работает прекрасно, но есть одно "Но.." - при блокировке таблички на запись (в момент выполнения dump`а), Nginx возвращает ошибку 500. После увеличения timeout для запроса, страничка просто ждет пока Lua-скрипт не вернет успех или ошибку.

Как сделать, чтобы работа счетчика не влияла на работу остальной части location?

Для работы с MySQL используется библиотека - lua-resty-mysql.
Скрипт "импортирован" в конфигурацию location через access_by_lua_file, т.к. внутри location присутствует proxy_pass на бэкенд.

В lua-nginx совсем недавно, так что буду рад любой помощи - вплоть до ссылок где и что почитать.
Спасибо!
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 2
AlekseyArh
@AlekseyArh
Кибер существо
Попробуй напиши
ngx.eof()
после ответа клиенту.

Что то вроде
ngx.say("привет")
ngx.eof() // тут клиент отключится
mysql:new() // всякая хрень дальше
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
Я бы сделал зеркалирование через mirror nginx.org/ru/docs/http/ngx_http_mirror_module.html
В этом location можно творить что угодно
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы