基于主机名路由时如何在本地测试haproxy?
How do I locally test haproxy when routing based on host name?
我有一个相当复杂的 haproxy 配置,它根据请求的主机(通过 acl + hdr_dom)路由到后端。如果我想在本地测试配置,我必须更改要测试的主机的分辨率(例如,通过更改主机文件将主机解析为 127.0.0.1)。然后我可以使用 wget 或 curl 在本地测试 haproxy 配置,然后重置主机文件。
但是,我想要进行自动化测试,而在自动化测试中更改系统级别的东西让我很紧张。在我开始以自动方式更改主机文件之前,有没有办法告诉 haproxy "pretend this request was made to xxx.yyy.com"?我可以采取其他方法吗?
谢谢
is there a way to tell haproxy "pretend this request was made to xxx.yyy.com"?
我认为这是错误的问题。正确的问题是 "How can I tell curl that example.com's IP address is 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 地址。
上面 Micheal 的回答是解决这个问题的最佳方法(因为它实际上是通过 DNS 查找)。如果这不起作用,我发现将 Host HTTP Header 设置为服务器也可以。例如,在 Windows/PowerShell 以下作品。
iwr http://localhost:8090/testjudge.aspx?version=1 -headers @{Host="xxx.yyy.com"}
Linux 的原生 curl 有不同的语法,但思想是一样的。参见 This post on how to do this on various platforms
我有一个相当复杂的 haproxy 配置,它根据请求的主机(通过 acl + hdr_dom)路由到后端。如果我想在本地测试配置,我必须更改要测试的主机的分辨率(例如,通过更改主机文件将主机解析为 127.0.0.1)。然后我可以使用 wget 或 curl 在本地测试 haproxy 配置,然后重置主机文件。
但是,我想要进行自动化测试,而在自动化测试中更改系统级别的东西让我很紧张。在我开始以自动方式更改主机文件之前,有没有办法告诉 haproxy "pretend this request was made to xxx.yyy.com"?我可以采取其他方法吗?
谢谢
is there a way to tell haproxy "pretend this request was made to xxx.yyy.com"?
我认为这是错误的问题。正确的问题是 "How can I tell curl that example.com's IP address is 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 地址。
上面 Micheal 的回答是解决这个问题的最佳方法(因为它实际上是通过 DNS 查找)。如果这不起作用,我发现将 Host HTTP Header 设置为服务器也可以。例如,在 Windows/PowerShell 以下作品。
iwr http://localhost:8090/testjudge.aspx?version=1 -headers @{Host="xxx.yyy.com"}
Linux 的原生 curl 有不同的语法,但思想是一样的。参见 This post on how to do this on various platforms