如何添加包含原始请求资源的绝对地址的自定义标题

我有以下设置:

|-------|--- backend1:8080 example.com:80---|HAProxy|--- backend2:8080 |-------|--- backend3:8080 

我想configurationHAProxy添加一个包含原始URL的自定义标题。 例如,如果用户请求http://example.com/foo?bar=baz ,即:

 GET /foo?bar=baz HTTP/1.1 Host: example.com:80 

我希望HAProxy把这个请求翻译成后端,就像这样:

 GET /foo?bar=baz HTTP/1.1 Host: backend1:8080 x-custom-header: http://example.com/foo?bar=baz 

reqadd选项只允许我添加一个静态值的头。 我能够使用reqrep从请求中获取path部分:

 reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2 

但不幸的是,这只捕获原始url的path部分导致以下标题:

 x-custom-header: /foo?bar=baz 

所以我的问题是在HAProxy 1.4中是否可以将Host头和HTTP请求的第一行组合成一个自定义头

简单的回答:不,你不能在HAProxy 1.4中做到这一点。


但是,对于那些在1.5+上find这个问题的人:

在HAProxy 1.5+中,您可以通过%[variable]语法引用variables,并且不限于只使用静态string。 您可以在HAProxyconfiguration指南的第7.3节中看到哪些variables已经存在(特别是第7层variables的7.3.6 )。

对于你的情况,你正在寻找原始url ,像这样:

 http-request set-header X-Custom-Header %[url]