我有一个在 tcp 模式下工作的 HAProxy 工作配置。
我可以捕获看起来像“Basic dGVzdDp0ZXN0”的授权标头(这意味着授权类型和用户名:密码base64编码)。
有时,在用户名:密码之后会出现“换行”符号,并且授权标头看起来像“Basic dGVzdDp0ZXN0Cg==”
所以我需要从授权标头末尾找到并删除“Cg==”。
怎么办?
frontend HAproxy
mode tcp
tcp-request content capture req.hdr(Authorization) len 128
backend server
mode tcp
server server1 172.16.1.1
我会在捕获行之前添加这两行,总是。
tcp-request inspect-delay 5s
tcp-request content accept if HTTP
我会切换到
mode http
进行这样的捕获,因为 req.hdr() 是一个 http 获取器。
在http模式下你可以使用类似下面的代码吗?
# untested line
# just to get one possible solution
http-request set-var(txn.my_Authorization) req.hdr(Authorization),b64dec,cut_crlf,base64
http-request set-header Authorization %[var(txn.my_Authorization)]
以上所有命令都记录在优秀的 HAProxy 文档
中在博客文章HAProxy ACL 简介 中通过更多示例解释了 HAProxy acl 功能