我正在研究如何根据请求动态定制我们的 NGINX 负载均衡器的行为。基本上,我想做一些事情,比如过滤不良请求、根据一些自定义外部代码动态确定上游服务器以及进行一些自定义统计/日志记录。
我认为实现这一目标的唯一方法是使用模块,但我没有编写 C/C++ 代码的经验,并且我想要运行的许多决策代码已经存在于其他系统中(特别是 C# 代码)。
是否有一个 NGINX 模块(最好是免费的)可以通过 TCP、管道或类似方式将基于请求的决策转移给外部软件?
我发现最接近的方法是ngx_http_auth_request_module
可以发出 HTTP 子请求,但它只能用于以是/否的方式确定身份验证状态,而不能选择上游服务器等。
答案1
我通过LUA脚本模块找到了解决方案,并创建了一个脚本来调用我们自己的HTTP API进行决策。
LUA模块: https://github.com/openresty/lua-nginx-module
我使用的 Stackoverflow 帖子来获得灵感: https://stackoverflow.com/questions/48348647/fetch-information-from-an-api-before-sending-the-request-upstream