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

3

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

但是,我想进行自动化测试,在自动化测试中更改系统级别的内容让我感到紧张。在我尝试以自动方式更改hosts文件之前,是否有一种方法告诉haproxy“假装这个请求是发给xxx.yyy.com的”?还有其他方法吗?

谢谢

2个回答

6

有没有办法告诉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

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


谢谢,这太完美了。我就知道肯定有类似的东西存在。 - Erick T

1
从上面的Micheal的回答来看,这是解决该问题的最佳方法(因为它实际上经过了DNS查找)。如果那个方法不起作用,我发现将Host HTTP头设置为服务器地址也可以解决。例如,在Windows/PowerShell中,以下方法有效。
iwr http://localhost:8090/testjudge.aspx?version=1 -headers @{Host="xxx.yyy.com"}

Linux的原生curl命令语法可能有所不同,但是其实现思路是相同的。请参考这篇关于如何在不同平台上执行此操作的文章


这确实有效 - 大部分情况下 - 但在使用HTTPS和SNI时不起作用。使用“--resolve”技巧本质上与黑客攻击您的主机文件相同,尽管更少侵入性。 - Michael - sqlbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接