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

Automated tests 基于主机名进行路由时,如何在本地测试haproxy?,automated-tests,haproxy,Automated Tests,Haproxy,我有一个相当复杂的haproxy配置,它通过acl+hdr_dom根据请求的主机路由到后端。如果我想在本地测试配置,我必须更改要测试的主机的分辨率,例如,通过更改主机文件将主机解析为127.0.0.1。然后,我可以使用wget或curl在本地测试haproxy配置,然后重置hosts文件 然而,我希望有自动化测试,在自动化测试中改变系统级的东西让我感到紧张。在我开始自动更改hosts文件之前,有没有办法告诉haproxy这个请求是向xxx.yyy.com发出的?我还有别的办法吗 谢谢 有没有办法

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

然而,我希望有自动化测试,在自动化测试中改变系统级的东西让我感到紧张。在我开始自动更改hosts文件之前,有没有办法告诉haproxy这个请求是向xxx.yyy.com发出的?我还有别的办法吗

谢谢

有没有办法告诉haproxy这个请求是向xxx.yyy.com发出的

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

答案是——决心


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

上面Micheal的回答是解决此问题的最佳方法,因为它实际上要通过DNS查找。如果这不起作用,我发现将主机HTTP头设置到服务器也能起作用。例如,在Windows/PowerShell中,以下功能可以正常工作

iwr http://localhost:8090/testjudge.aspx?version=1 -headers @{Host="xxx.yyy.com"}

Linux的原生curl有不同的语法,但想法是一样的。请参见

谢谢,这太完美了。我知道一定有类似的东西在那里这确实有效-大多数情况下-但不是当你使用HTTPS和SNI时。使用-resolve技巧本质上与黑客攻击主机文件相同,但侵入性较小。
iwr http://localhost:8090/testjudge.aspx?version=1 -headers @{Host="xxx.yyy.com"}