我刚刚开始使用HAProxy
,出现以下情况:
- 我有两个后端服务,我们把它们
service A
称为service P
- 我正在尝试使用类似负载均衡器
haproxy
- 当一个请求到达时,假设它有
token
一个 HTTP 标头的一部分,就像X-SOME-TOKEN
这样httponly
- 我想提取它
token
,发送给它service A
,检索一个ID token
,将它附加到一个请求service B
,如果返回 HTTP 状态代码 200,则只有成功 HTTP 状态代码 200 并且发送的 JSON 有效负载service B
才会发送到客户端,否则,HTTP 状态代码 500 会发送到客户端。
我对部分感到困惑3 and 4
。我不确定是否可以使用在负载平衡层完成此操作haproxy
。我查看了文档并简要阅读了有关acl
。如果可以使用,那么acl
可能的方法是什么?
为了添加更多上下文,这是我的配置文件,其中包含我想要进行更改的位置的注释:
global
log /dev/log daemon
maxconn 32768
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats user haproxy group haproxy mode 0640 level admin
tune.bufsize 32768
tune.ssl.default-dh-param 2048
ssl-default-bind-ciphers ALL:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
defaults
log global
mode http
option log-health-checks
option log-separate-errors
option dontlog-normal
option dontlognull
option httplog
option socket-stats
retries 3
option redispatch
maxconn 10000
timeout connect 5s
timeout client 50s
timeout server 450s
#listen stats
#bind 0.0.0.0:80
#bind :::80 v6only
#stats enable
#stats uri /
#stats refresh 5s
#rspadd Server:\ haproxy/1.6
frontend testnode
# I want to define all my urls here for which,
# the load balancer needs to listen to on port 4200
bind 127.0.0.1:4200
mode http
default_backend testnodebackend
backend testnodebackend
# this is where I believe I need to add the proper functions
# based on url endpoint like mydomain.com/endpoint, I want
# to decide where service A needs to be called for token exchange
# this configuration currently points to two instances of the same
# server
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server node1 127.0.0.1:4201 check
server node2 127.0.0.1:4202 check
编辑
我发现可以HAProxy
使用 Lua 作为脚本语言来添加自定义请求处理程序。我已经设置了配置,可以从 HAProxy 运行“hello_world”示例。但是,当它尝试在 Lua 中加载模块(如套接字模块)时,会出现导入错误。一旦我修复了这个问题,我将添加更多关于如何设置这些自定义请求处理程序的内容。