HAProxy Lua 如何更改服务器端口?

Server.set_addr(sv,addr)

我不知道该方法输入什么。 看起来 Server.get_addr(sv) 返回 ip:port - 所以还需要传递 ip:port,但这不起作用。

文档中写道: “有关字符串格式的更多信息,请参见控制套接字的文档。”

好吧,我看到你需要传输 ip port:port(例如:127.0.0.1 port 80)。但那也不起作用。

唯一起作用的是仅传递IP(例如:127.0.0.1)。

问题是如何更改端口?

代码示例:(如果不起作用-日志中没有任何条目)

--work
--日志条目:使用Lua脚本将其IP从1.1.1.1更改为2.2.2.2。
local newAdr = backendServer.ip
server:set_addr(newAdr)

--未工作
local newAdr = backendServer.port
server:set_addr(newAdr)

--未工作
local newAdr = backendServer.ip .. ":" .. backendServer.port
server:set_addr(newAdr)

--未工作
local newAdr = backendServer.ip .. " " .. backendServer.port
server:set_addr(newAdr)

--未工作
local newAdr = backendServer.ip .. " port " .. backendServer.port
server:set_addr(newAdr)
点赞
用户7509065
用户7509065

更新: 截至 HAProxy 2.2dev7 版本,此功能已被合并:set_addr 接受一个额外的可选参数来指定一个新的端口。


目前无法通过 Lua 实现此功能。从 HAProxy 的源代码中可以看出,set_addr 调用了 hlua_server_set_addr,后者调用了 server_parse_addr_change_request,后者调用了 update_server_addr,后者只更新了地址而不是端口。而管理套接字的 set server 调用了 cli_parse_set_server,后者调用了 update_server_addr_port,后者确实更新了端口。

但是,有两个好消息:

  1. 由于管理套接字可以实现这一点,因此您可以使用它作为解决方法。
  2. 修改 HAProxy 的 Lua 接口以支持更新端口将非常简单,因为所有逻辑已经存在。我曾向他们的邮件列表发送了 一个补丁
2020-05-03 17:58:55