在haproxy中重写url

时间:2017-06-06 05:06:42

标签: mod-rewrite url-rewriting haproxy

我有haproxy作为我们的nodejs app的前层,我正在寻找一种重写url的方法。例如,如果客户转到https://aaa.com/product/123,haproxy将重写为网址https://bbb.com/product/123。在Haproxy可以做到这一点吗?重要的是我们要保留url参数(product / 123)并只更改主机名

1 个答案:

答案 0 :(得分:0)

你说你想“重写”但这个词经常被滥用。你的意图是什么?

  • 您是否要重写传入的URL,然后使用HTTP重定向更改浏览器地址栏中的地址?

如果是,请在代理配置中:

"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进行非便携式操作,在这种情况下可能需要进一步重写头文件(可能在两个方向上)或更改应用程序。