呼叫lua以回应503中的haproxy

时间:2018-12-17 06:20:15

标签: lua haproxy

我正在使用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-requesthandle-response

但是,如果HAProxy本身无法找到后端(本身返回503),则会调用500,但不会调用handle-request

我也尝试过使用TCP操作。

在这种情况下,有什么方法可以运行Lua代码吗?

1 个答案:

答案 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)

再次,不能足够强调这是一个坏主意。