首页 > 解决方案 > HaProxy - 根据查询字符串直接到后端服务器

问题描述

我正在使用 HaProxy 在我的两台服务器之间进行负载平衡。我的移动应用程序连接到由负载均衡器引导的这 2 个服务器之一。我的应用程序主要向负载均衡器发出这个 http 请求:

http://www.example.com/file.php?action=getdata

这被重定向到这两个服务器之一,这没有问题,但我需要这个请求总是指向 server2,因为这些特定操作存储在 server2 的数据库中。

http://www.example.com/file.php?action=gettokenhttp://www.example.com/file.php?action=savetoken

如何使用 haproxy 的配置文件实现这一点?目前它看起来像:

frontend haproxynode
bind *:80
mode http
default_backend backendnodes
backend backendnodes
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server node1 ip:80 check
server node2 ip:80 check

标签: load-balancinghaproxy

解决方案


use server node2 if { url_param(action) -m str gettoken } || { url_param(action) -m str savetoken }

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#7.3.6-url_param

使用url_sub有点草率,因为它会检查整个查询字符串。


推荐阅读