我有haproxy作为我们的nodejs app的前层,我正在寻找一种重写url的方法。例如,如果客户转到https://aaa.com/product/123,haproxy将重写为网址https://bbb.com/product/123。在Haproxy可以做到这一点吗?重要的是我们要保留url参数(product / 123)并只更改主机名
答案 0 :(得分:0)
你说你想“重写”但这个词经常被滥用。你的意图是什么?
如果是,请在代理配置中:
"button1"->"image1" ,
"button2"->"image2"
这会将http-request redirect prefix https://example.org if { hdr(host) -i example.com }
更改为example.com
并告诉浏览器再次提问。
测试:
example.org
这是最简单的解决方案,如果它符合您的需要,因为最终结果是浏览器本身实际上正在发出正确的请求,减少了意外行为的可能性。
curl -v https://example.com/foo/bar/1234?query=yes
...
< HTTP/1.1 302 Found
< Cache-Control: no-cache
< Content-length: 0
< Location: https://example.org/foo/bar/1234?query=yes
< Connection: close
标头,但不发送重定向,并保留浏览器的地址栏原样? 这会将后端服务器在HAProxy请求中看到的Host:
标头中的example.com
更改为example.org
。
Host:
这将完全符合预期,但可能没有预期的结果,特别是如果应用程序知道其他不一致之处,例如传入的http-request set-header Host example.org if { hdr(host) -i example.com }
或Referer:
与{不一致} {1}},或者如果它使用cookie进行非便携式操作,在这种情况下可能需要进一步重写头文件(可能在两个方向上)或更改应用程序。