Я изучаю возможность динамической настройки поведения наших балансировщиков нагрузки NGINX для каждого запроса. В основном я хочу делать такие вещи, как фильтрация плохих запросов, динамическое определение вышестоящего сервера на основе некоторого пользовательского внешнего кода и выполнение некоторой пользовательской статистики/регистрации.
Я полагаю, что единственный способ сделать это — использовать модуль, но у меня нет опыта написания кода на C/C++, и многие коды для принятия решений, которые я хочу запустить, частично уже существуют в других системах (в частности, в коде на C#).
Существует ли модуль NGINX (предпочтительно бесплатный), который может переносить решения на основе запросов во внешнее программное обеспечение через TCP, конвейер или что-то подобное?
Самое близкое, что я нашел, это ngx_http_auth_request_module
который может сделать подзапрос HTTP, но его можно использовать только для определения статуса аутентификации в виде да/нет, а не для выбора вышестоящего сервера и т. д.
балансировка нагрузки nginx
1 ответ
Я нашел решение с помощью модуля сценария LUA и создал сценарий для вызова нашего собственного HTTP API для принятия решений.
ДВА модуля:
https://github.com/openresty/lua-nginx-модуль
Сообщение Stackoverflow, которое я использовал для вдохновения:
https://stackoverflow.com/questions/48348647/fetch-information-from-an-api-before-sending-the-request-upstream
Хенрик