如何添加包含最初请求资源的绝对地址的自定义标头

如何添加包含最初请求资源的绝对地址的自定义标头

我有以下设置:

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

我想配置 HAProxy 以添加包含原始 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

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

但不幸的是,这仅捕获原始 URL 的路径部分,从而产生以下标头:

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

所以我的问题是 HAProxy 是否可以实现1.4Host标头和 HTTP 请求的第一行合并为自定义标头

答案1

简短回答:不,你不能这样做HAProxy 1.4


但是,对于那些在 1.5+ 上发现此问题的人来说:

在 HAProxy 1.5+ 中,您可以通过语法引用变量%[variable],并且不仅限于使用静态字符串。您可以查看哪些变量已经存在第 7.3 节HAProxy 配置指南(特别是7.3.6 第 7 层变量)。

对于您的情况,您正在查看 raw url,如下所示:

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

相关内容