load-balancing - HaProxy - 根据查询字符串直接到后端服务器
问题描述
我正在使用 HaProxy 在我的两台服务器之间进行负载平衡。我的移动应用程序连接到由负载均衡器引导的这 2 个服务器之一。我的应用程序主要向负载均衡器发出这个 http 请求:
http://www.example.com/file.php?action=getdata
这被重定向到这两个服务器之一,这没有问题,但我需要这个请求总是指向 server2,因为这些特定操作存储在 server2 的数据库中。
http://www.example.com/file.php?action=gettoken或 http://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
解决方案
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
有点草率,因为它会检查整个查询字符串。
推荐阅读
- c# - 多次打开 WPF 应用程序
- acumatica - Acumatica REST API - StockItem - 如何在请求中使用多个产品 ID
- nginx - 例程:SSL23_GET_SERVER_HELLO:尝试使用代理连接到 Neo4j 服务器时的未知协议
- javascript - 在没有任何 PHP 的情况下刷新 HTML 中的 div?
- python - 在xaxis(python)中使用日期时间创建seaborn catplot
- macos-mojave - Apple News Preview - 无法加载文章
- java - Java:空检查后的空指针异常
- hibernate - 如何将 TypedQuery 结果映射到自定义对象列表
- reactjs - 使用 axios 发布请求和获取响应
- php - curl 响应是一个字符串而不是一个数组