带有Lua和TCP重定向的HAproxy 1.6
Hy, 我正在尝试使用基于TCP内容的HAproxy重定向流量 使用Lua,我可以注册一个检查内容的服务,如下所示:带有Lua和TCP重定向的HAproxy 1.6,tcp,lua,haproxy,Tcp,Lua,Haproxy,Hy, 我正在尝试使用基于TCP内容的HAproxy重定向流量 使用Lua,我可以注册一个检查内容的服务,如下所示: core.register_service("chooseserver", "tcp", function(AppletTCP) function string.checkit(str) --mylogichere return string.char('server1') end tcp_line = AppletTCP:getline()
core.register_service("chooseserver", "tcp", function(AppletTCP)
function string.checkit(str)
--mylogichere
return string.char('server1')
end
tcp_line = AppletTCP:getline()
server = tcp_line:checkit()
if server == 'server1' then
-- HERE
AppletTCP:send(tcp_line)
else
AppletTCP:send(tcp_line)
end
end)
在HAproxy配置中,您可以添加
listen proxy
bind 127.0.0.1:10001
tcp-request content use-service lua.chooseserver
这将执行服务(并且我可以记录信息),但是AppletTCP:send没有像我预期的那样工作(没有错误)将包发送到后端定义,并且我无法将TCP包发送到我选择的服务器
我不确定是否应该使用register_操作来代替此任务,但我也无法使其工作
我需要Lua,因为我需要读取TCP包的内容,并根据其内容将其发送到另一台服务器。我需要能够拆分解码和编码字符串、迭代数组和类似的基本运算符。如果您知道其他方法,也很高兴知道。它以什么方式不符合您的期望?这是一个错误吗?只是没有(无声地)发送吗?它会崩溃吗?具体点。包括错误和日志消息。我希望HTTP小程序类的applet.send的行为与applet.send类似,至少回答客户端,但我在客户端中看不到任何内容,并且无论如何都不是我想要的输出。因此,是的,“静默”可能是最好的定义。请尝试将
返回字符串.char('server1')
替换为返回'server1'
当Lua脚本是最终目标时,使用服务。分析内容将通过一个操作完成,tcp请求内容lua.xxxx
,但您不能“返回”后端。您需要从Lua设置HAProxy事务变量,并基于此选择后端。后端逻辑是什么?Lua是绝对必要的吗?@Michael sqlbot,我试图使用tcp请求内容Lua.xxx,但回答:“tcp-request内容”要求“接受”、“拒绝”、“跟踪-sc0”…”track-sc2、'sc-inc-gpc0(*)'、'sc-set-gpt0(*)'、'silent drop'、'use service'、'set var(*)'、'lua.chooseserver'在proxy'proxy'(获得'lua.chooseserver')中的'lua.chooseserver'。
不确定我是否需要lua,将在问题中澄清要求。但我想是的。后端逻辑很简单,目的地很少(少于30个)。如果我可以基于TCP内容从“Lua output”设置变量,我想我可以在HAproxy中使用If条件设置后端。你能告诉我怎么做吗?