我有以下设置:
|-------|--- 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]