在基于主机名进行路由时,如何在本地测试haproxy?

时间:2017-09-21 23:14:16

标签: automated-tests haproxy

我有一个相当复杂的haproxy配置,它根据请求的主机(通过acl + hdr_dom)路由到后端。如果我想在本地测试配置,我必须更改我要测试的主机的分辨率(例如,通过更改主机文件以将主机解析为127.0.0.1)。然后我可以使用wget或curl在本地测试haproxy配置,然后重置hosts文件。

但是,我希望进行自动化测试,在自动化测试中更改系统级别的东西会让我感到紧张。在我以自动方式更改hosts文件的路径之前,有没有办法告诉haproxy“假装此请求是针对xxx.yyy.com”的?我可以采取其他方法吗?

由于

2 个答案:

答案 0 :(得分:2)

  

有没有办法告诉haproxy"假装这个请求是针对xxx.yyy.com"?

我认为这是错误的问题。正确的问题是"我如何告诉curl example.com的IP地址是127.0.0.1?"

答案是--resolve

curl -v --resolve example.com:80:127.0.0.1 http://example.com
curl -v --resolve example.com:443:127.0.0.1 https://example.com

这会将答案(127.0.0.1)预加载到curl的DNS缓存中,仅用于该调用,这显然会欺骗它实际上不进行DNS查找,因为它认为它已经做了。相反,它将连接到您指定的IP地址。

答案 1 :(得分:0)

上面的Micheal的答案是解决这个问题的最佳方式(因为它实际上是通过DNS查找)。如果这不起作用,我发现将Host HTTP Header设置到服务器也可以。例如,在Windows / PowerShell中,以下工作。

{{1}}

Linux的原生卷曲有不同的语法,但这个想法是一样的。见This post on how to do this on various platforms