我正在使用HAProxy Lua API。我想在 all http-request和http-response事件上调用Lua动作。
这正常工作,除非HAProxy本身无法完成请求(例如,没有可用的后端)。在这种情况下,我找不到呼叫Lua的方法。
例如
tasklist /?
这很好,即使后端服务器返回listen appname
bind 0.0.0.0:8000
mode http
http-request lua.handle-request
http-response lua.handle-response
server hostname 127.0.0.1:8001 check
状态或其他错误,也可以调用handle-request
和handle-response
。
但是,如果HAProxy本身无法找到后端(本身返回503),则会调用500
,但不会调用handle-request
。
我也尝试过使用TCP操作。
在这种情况下,有什么方法可以运行Lua代码吗?
答案 0 :(得分:0)
我能找到的唯一方法是绝对不应该使用的极其可怕和邪恶的黑客手段。
使用task
从syslog中读取UDP,以捕获HAproxy日志中的503响应。
配置:
lua-load youre_a_terrible_person.lua
log 127.0.0.1:8004 local0 debug
option httplog
卢阿:
core.register_task(function()
local socket = require("socket")
udp = socket.udp()
udp:setsockname("*", 8004)
udp:settimeout(0)
while true do
data = udp:receive()
if data then
print("Received: ", data)
-- Look for your 503 and do stuff
else
core.sleep(1)
end
core.yield()
end
end)
再次,不能足够强调这是一个坏主意。