我正在尝试根据以下POST主体中标识的URL将以下请求路由到相应的服务器。我希望通过使用HAProxy的反向代理来实现这一目标。
E.g。我想将所有请求定向到HAProxy,而不是让HAProxy检查POST主体中是否存在某些值(例如通知URL值“pingpong”),如果是这种情况,请将流量路由到我将指定的endopint配置。
POST /someURL/file.jsp HTTP/1.1
Host: 10.43.90.190:80
Content-Type: application/json
Connection: keep-alive
Accept: */*
Content-Length: 256
{"Info": {"groupName":"thisgroup1","Id":"M1234R456","id2":"TUP1234",
"countryCode":"USA","carrierCode":"USAIC","e164Address":"123456768789",
"notificationURL":"http:\/\/www.pingpong.com\/notify",
"timestamp":"2014-03-04T17:33:30.000Z"}}
有没有办法使用acl在请求体中搜索内容“pingpong”,并根据这个值,我会适当地路由它?
谢谢!
答案 0 :(得分:4)
这可以使用简单的访问控制列表(ACL)来完成。但是,在Haproxy 1。0(2015年10月)之前,这是不可能的,你可以在你的前端包含这个选项:
option http-buffer-request
此选项可让Haproxy访问正文。然后你可以使用req.body来访问正文。例如:
frontend http-in
bind *:80
option http-buffer-request
acl redirect_pingpong req.body -m reg [insert your regular expression here]
use_backend pingpong_backend if redirect_pingpong
default_backend web_bk
然后继续定义你的后端。
答案 1 :(得分:-1)
有可能在nginx / tengine中解决这个问题,但我仍然没有发现在HAProxy中,如果你可以切换到tengine / nginx,你可以使用nginx_http_lua_module。我仍然必须警告你,它有一些我还没有解决的性能问题,