我有以下设置:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
Run Code Online (Sandbox Code Playgroud)
我想配置 HAProxy 以添加包含原始 url 的自定义标头。例如,如果用户请求http://example.com/foo?bar=baz
,即:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
Run Code Online (Sandbox Code Playgroud)
我希望 HAProxy 将此请求转换为后端,如下所示:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
Run Code Online (Sandbox Code Playgroud)
该reqadd
选项仅允许我添加具有静态值的标题。我能够使用reqrep
以下命令从请求中获取路径部分:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这仅捕获原始 url 的路径部分,导致以下标题:
x-custom-header: /foo?bar=baz
Run Code Online (Sandbox Code Playgroud)
所以我的问题是在 HAProxy 1.4 中是否有可能Host
将 HTTP 请求的标头和第一行组合成一个自定义标头
Nic*_*ver 18
简短回答:不,您不能在HAProxy 1.4 中执行此操作。
但是,对于那些在 1.5+ 上发现这个问题的人:
在 HAProxy 1.5+ 中,您可以通过%[variable]
语法引用变量,并且您不仅限于使用静态字符串。您可以在 HAProxy 配置指南的第 7.3 节(特别是第 7 层变量的第 7.3.6节)中看到哪些变量已经存在。
对于您的情况,您正在查看 raw url
,如下所示:
http-request set-header X-Custom-Header %[url]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38169 次 |
最近记录: |