我一直在阅读 HAProxy 的文档,但似乎找不到一种根据源 IP 地址路由 HTTP 请求的方法。也就是说,我想将特定源路由到特定后端服务器。例如,我想将来自 10.1.0.3 的任何请求路由到一台特定服务器。
我在3节点MariaDB集群前使用HaProxy 1.5.0.HaProxy使用自定义查询/ xinet服务检查每个数据库节点是否具有同步状态.当由于某种原因检查失败(例如节点被desynced或成为捐赠者)时,haproxy中相应的后端被标记为down,但我仍然可以在haproxy统计控制台中看到它上面的活动会话,以及DB进程列表中的查询(这是可能的,因为MariaDB服务仍然启动并接受查询,即使群集状态未同步).我想知道为什么HaProxy在后端关闭时不会关闭活动连接,并将它们发送到其他活动后端?当MariaDB服务在给定节点上完全停止时(无可能会话),我得到了这种预期的行为.是否有特定的选项允许这个?选项redispatch看起来很有希望但它适用于连接关闭时(不是我的情况)并且它已经在我的配置中处于活动状态.谢谢你的帮助.
如何构造HAPROXY配置文件来阻止对特定HTTP方法的请求?
我们开始看到许多攻击使用我们的应用程序中不支持的方法.我们宁愿拒绝我们的负载均衡器的流量,而不是让我们的应用程序陷入困境.
我在syslog中看到这些消息弹出:
Mar 10 12:51:35 db1 kernel: [5851729.958138] type=1400 audit(1457614295.823:2925931): avc: denied { name_connect } for pid=801 comm="haproxy" dest=7778 scontext=system_u:system_r:haproxy_t:s0 tcontext=system_u:object_r:interwise_port_t:s0 tclass=tcp_socket
Run Code Online (Sandbox Code Playgroud)
这是否意味着SELinux拒绝与haproxy的连接?
谢谢
我在我的 HAProxy 统计报告中看到
Sessions Curr、Max、Limit 全部为 2000。
如何将 Max 和 Limit 增加到 2000 以上?
I have 3 servers which listen on following port ,
> 10.21.5.39:80 --> api.something.com
> 10.21.4.234:80 --> *.something.com
> 10.21.5.73:80 --> coolapi.something.com
> 10.21.5.73:3002 --> school.something.com
Run Code Online (Sandbox Code Playgroud)
I am using a HAProxy server to redirect the traffic to these backends, i am using the following config on haproxy which doesn't seem to workout.
frontend api
bind *:80
acl url_api path_beg /api
use_backend api-backend if url_api
frontend custui
bind *:80
acl url_custui path_beg *
use_backend custui-backend if url_custui
frontend backoffice
bind *:80 …Run Code Online (Sandbox Code Playgroud) 我有一个相当复杂的 haproxy 配置,它根据请求的主机(通过 acl + hdr_dom)路由到后端。如果我想在本地测试配置,我必须更改要测试的主机的分辨率(例如,通过更改主机文件以将主机解析为127.0.0.1)。然后我可以使用 wget 或curl 在本地测试 haproxy 配置,然后重置主机文件。
然而,我想要进行自动化测试,并且在自动化测试中改变系统级的东西让我感到紧张。在我以自动方式更改主机文件的路径之前,有没有办法告诉 haproxy“假装此请求是向 xxx.yyy.com 发出的”?我可以采取其他方法吗?
谢谢
我们有几个 haproxy 配置在大多数情况下运行良好。在我们的场景中,我们只是根据域名路由请求。这是一个域的示例,drawmessage.com:
frontend http
bind *:80
redirect prefix http://app.drawmessage.com code 301 if { hdr_dom(host) -i www.app.drawmessage.com }
redirect prefix http://drawmessage.com code 301 if { hdr_dom(host) -i www.drawmessage.com }
redirect prefix https://drawmessage.com code 301 if { hdr_dom(host) -i drawmessage.com }
use_backend http:app.drawmessage.com if { hdr_dom(host) -i app.drawmessage.com }
use_backend http:app.drawmessage.com if { hdr_dom(host) -i app-drawmessage-com.d250.hu }
use_backend http:drawmessage.com if { hdr_dom(host) -i drawmessage.com }
use_backend http:drawmessage.com if { hdr_dom(host) -i drawmessage-com.d250.hu }
Run Code Online (Sandbox Code Playgroud)
还有其他域,仅针对该域进行过滤。如您所见,在 www 重定向后,我们为 drawmessage.com 应用了特殊重定向,但理论上不适用于 app.drawmessage.com。
frontend https …Run Code Online (Sandbox Code Playgroud) 我面临 HAProxy (1.8) 的配置问题。
语境:
问题:
这实在是让我很不爽……
所以我的问题是:如何防止 HAProxy 将客户端粘到后端的备份服务器上?
请在下面找到配置示例:
defaults
option redispatch
frontend fe_test
bind 127.0.0.1:8081
stick-table type ip size 1m expire 1h
acl acl_test hdr(host) -i whatever.domain.com
...
use_backend be_test if acl_test
...
backend be_test
mode http
balance roundrobin
stick on hdr(X-Real-IP) table fe_test
option httpchk GET /check
server test-01 server-01.lan:8080 check
server test-02 server-02.lan:8080 check
server maintenance 127.0.0.1:8085 backup
Run Code Online (Sandbox Code Playgroud)
(我已经尝试为备份服务器添加较低的权重,但它没有解决这个问题。)
我在文档中读到“stick-on”关键字有一些“if/unless”选项,也许我可以用它来根据后端服务器名称编写条件,但我不知道要使用的语法,或者即使有可能。
欢迎任何想法!
我有 Java 客户端,它通过 HA 代理与 3rd 方服务对话。3rd 方服务最近发生了变化,所以现在它返回 302(临时移动)而不是 200(Ok),这会导致我的 java 客户端失败,因为它期望实际响应为 200。出于多种原因,我想避免对 Java 客户端进行任何代码更改。
那么,问题来了:有没有办法让 HA 代理自己跟踪重定向,并且只将结果(不是 3xx http 代码)返回给客户端?
还有一件事要提到:我通过 http 访问 HA 代理,HA 代理通过 https 访问 3rd 方资源,并在 https 上返回带有位置的 302。位置各不相同,因此无法将 HA 代理配置到新位置。
HA 代理版本: HA-Proxy version 1.7.5 2017/04/03
操作系统: CentOS Linux release 7.2.1511 (Core)