【发布时间】:2019-04-13 04:54:02
【问题描述】:
我正在尝试在 HAProxy 中定义一个 LUA 挂钩,以便在收到响应后执行操作(终止处理请求的容器)。我的问题是处理 HAProxy 缓冲区。我尝试了不同的实现,这是最接近工作的一种(尽管有一半的时间不会将所有数据发送回客户端):
function hook(txn)
local in_len = txn.res:get_in_len()
while in_len > 0 do
txn.res:forward(in_len)
local out_len = txn.res:get_out_len()
while out_len ~= 0 do
core.yield()
out_len = txn.res:get_out_len()
end
in_len = txn.res:get_in_len()
end
os.execute("docker rm -f server_" .. txn.sf:srv_id())
end
core.register_action("hook", { "http-res" }, hook)
我最大的问题是没有 Content-length 标头,所以我不知道何时处理完所有信息,也不知道何时完成。此外,我无法使 get 和 set 方法正常工作,因为每次调用 get 时,我都会得到完全相同的信息。
这是 HAProxy 的配置:
backend my-backend
balance roundrobin
http-response lua.hook
server server_1 192.168.1.3:80 check
在杀死后端服务器之前处理所有信息的正确方法是什么?
【问题讨论】: