我有以下设置:
|-------|--- 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.4中是否可以将Host
标头和HTTP请求的第一行都组合到自定义标头中
reqadd
引用be_id
(backend-id)的ACL ?它不是完全动态的,但是如果后端数量很少,它可能会使您更接近……reqirep
还支持可选的acl,因此您可以为每个后端编写单独的正则表达式,仅当acl与选定的后端匹配时才激活每个正则表达式- ID。