Articles of haproxy

HAProxy:限制基于HTTP头字段的并发连接

我尝试使用基于HTTP头字段的HAProxy粘贴表来限制并发连接的数量。 我可以find很多使用IP地址的例子,但是这在我的情况下不起作用。 我们的应用程序仅在HTTP头字段x-account上区分用户帐户,并期望来自多个IP的请求同时发生。 在这一点上,我不能提供任何错误消息或任何东西,因为我不能够了解configuration到目前为止。 因此,这是关于HAProxy使用/configuration的一个非常基本的问题。 从阅读HAProxy文档后我的理解: 我定义如下的表格: stick-table type string size 100m store conn_cur 这应该为我提供一个表来存储我的头字段。我没有添加到期,因为我实际上并不在乎,价值将是高度重复无论如何。 另外,ee不要期望比5K-10K更多的条目,即不同的帐户。 到目前为止,文件是非常清楚的,但从这里开始我的麻烦开始。 我想我需要一条线告诉HAProxy它应该把头域的值和连接关联起来,并报告它被打开并最终closures。 这可能是这样的吗? stick store-request hdr(x-account) account_table 而且,如果超过此用户的最大会话数,则必须有一行拒绝/请求请求。 像这样的东西我猜: http-request tarpit if hdr(x-account) account_table gt 10 至less这是我所期待的,但我可能完全错了。 正如我之前所说的,我无法find任何使用表格中的string的例子。 如果有帮助,我可以提供完整的HAProxyconfiguration,但是我认为这不是相关的,因为这只是前端定义的一部分,对吗? 任何帮助表示赞赏。 干杯,拉尔夫

Keepalive Nginx-Haproxy-Apache链的最佳实践

我使用Nginx来提供静态内容,Haproxy代理请求到通过Zookeeper发现的多个Apache2后端。 Nginx – > Haproxy – > Apache2 根据Nginx官方网站的说法,它将这种长时间保持连接的方式聚集在这样的后端,将连接数量降到最低。 因此,我的假设是,Nginx是Keepalive必须在哪里,并设置一个更大的价值,在我的情况“keepalive_timeout 600”; 然后在本地端口上点击Haproxy,Apache后端的“httpclose”选项打开: 选项httpclose启用或禁用被动H​​TTP连接closures HAProxy还不支持HTTP保持活动模式。 所以在默认情况下,如果一个客户端在这种模式下与服务器进行通信,它将只分析,logging和处理每个连接的第一个请求。 要解决这个限制,可以指定“选项httpclose”。 它将检查每个方向是否已经设置了“连接:closures”标题,并且如果缺失则添加一个标题。 每一端都应该在每次传输之后主动closuresTCP连接,从而导致切换到HTTPclosures模式。 任何“连接”标题不同于“closures”也将被删除。 这个选项可以设置在前端和后端。 如果前端或后端中至less有一个持有连接,则启用该function。 然后Haproxy将连接路由到Apache2。 所以,我的假设是,在这种情况下,我将不得不closuresApache的keepalive,因为a)Nginx聚合连接b)Haproxyclosures它们。 我的推理是否正确,在这样的链条上优化Keepalive会更好吗? 更新: 这个 ServerFault主题指出,从Haproxy中移除Keepalive也是有益的(因此我们可以去掉httpclose),因为Haproxy和Apache之间的延迟太低,无法消除握手。 所以我们用Nginx(KA) – > Haproxy(没有KA) – > Apache(没有KA) 这是更好的select吗?

HAProxy日志传出的请求

目前,我的HAProxy日志包含有关传入请求的信息:HTTP版本,方法,主机,path和标头。 我试图debugging我的HAProxyconfiguration,并需要知道什么产生的传出请求,特别是主机和path。 如何logging传出的请求,以便我可以debuggingHAProxy?

HAProxy IPv6到IPv4问题

我在Ubuntu 14.04上安装了一个HAProxy节点版本1.5.3。 Ubuntu服务器有1个nic。 nic具有IPv6地址和IPv4地址。 IPv6在端口80上侦听传入的internet连接。 Web服务器安装在具有IPv4地址的同一VLAN中的单独Windows IIS计算机上。 没有防火墙。 从互联网上我可以连接到80端口到IPV6地址,这样很好。 HAProxy统计显示后端web服务器是好的但仍然无法通过HAPRoxy浏览IPv4服务器上的网站。 当我打开我的浏览器,我得到一个错误在IE浏览器:“HTTP 400错误请求”我重新安装Ubuntu,没有帮助。 我把头发拉出来 有人请帮忙。 这是我的configuration: global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on […]

如何使用依赖于请求的acl作为条件匹配或条形码响应存储中的条件

在neo4j中有事务性密码端点 。 这允许客户端通过多个REST请求产生数据库事务。 第一个请求会打开一个新的事务,并返回用于后续请求包含事务ID的http Location头中同一事务的URL,例如 Location: http://192.168.0.10:7474/db/data/transaction/24 最后的数字是内部事务ID。 随后的closures事务的请求被发送到http://192.168.0.10:7474/db/data/transaction/24/commit 。 为了实现这一点,我使用haproxy后端configuration的以下片段: backend neo4j-all option httpchk GET /db/manage/server/ha/available stick-table type integer size 1k expire 10m stick match path,word(4,/) stick store-response hdr(Location),word(6,/) server s1 127.0.0.1:7474 maxconn 32 check server s2 127.0.0.1:7475 maxconn 32 check server s3 127.0.0.1:7476 maxconn 32 check 一个粘性表填充事务ID(位置标题中的第6个字)。 后续的请求path包含事务标识为第4个字。 这部分工作正常。 不过,我想限制stick表使用的path以/db/data/transaction开头,因为Neo4j可能有其他terminal以及不同的行为。 我的第一个天真的做法是简单地将acl添加到后端: acl tx_cypher_endpoint […]

如果服务器绑定到一个IP,如何在集群内共享本地IP?

在testing设置中,我有一个在虚拟机上运行3个节点的集群。 现在我想把它带到Hetzner Online,通过交换机连接到3台专用的根服务器。 正如我发现的,他们不再提供共享IP,而是将服务器绑定到一个IP。 对于外部IP来说,这是没有问题的,因为它们提供了具有故障转移IP的备选scheme。 但是我的DB服务器是通过内部地址10.0.0.10来处理的,这导致了2个keepalived HAProxy服务器来扩展负载。 我不想为此使用外部IP。 如果我无法configuration共享IP,如何保持内部stream量,同时使用HAProxy进行故障转移? 失败的地方是: sudo sysctl -p sysctl: cannot stat /proc/sys/net/ipv4/ip nonlocal_bind: No such file or directory

Haproxy Nginx / Naxsi到Web服务器不工作

我有一个haproxy / nginx / naxsi设置负载平衡和安全性。 stream量应该进入haproxy然后到nginx / nasxi然后最终到达web服务器,如果他们通过了WAF。 我们也有一个不同的IP地址在前面,然后我们在后面做。 我做错了什么,它不会stream经nginx? 如果我绕过nginx / naxsi,它只会按照预期工作,所以在经过nginx时我只会得到503错误。 Inet – > Haproxy .5.3:80 – > .5.3:81 Nginx / Naxsi .6.3:81 – > .6.x:80 Web服务器 frontend ft_waf bind 10.0.5.15:80 name http mode http log global option httplog timeout client 25s maxconn 10000 # DDOS protection # Use General Purpose Couter (gpc) […]

HAProxy随机失败(后端没有服务器!)

我有一个CentOS 7.1(x64)液滴configuration为在2个Apache / PHP服务器之间进行负载平衡。 我有它完美的工作,但随机一整天报告如下: haproxy[12947]: backend app_backend has no server available! HA代理日志文件: Nov 5 [12947]: Server app_backend/web-live is DOWN, reason: Layer4 timeout, check duration: 2001ms. 0 active and 1 backup servers left. Running on backup. 11 sessions active, 0 requeued, 0 remaining in queue. Nov 5[12947]: Backup Server app_backend/web-backup is DOWN, reason: Layer4 timeout, […]

带有不同源地址的Nginx代理

我有一个工作 nginxconfiguration代理从一系列源IP到服务器的所有请求。 我目前有20个源IP设置,configuration相当庞大。 为了简洁起见,我删除了其他18个街区。 我想知道是否有一个更简单的方法来做到这一点。 我需要添加100个以上的IP,configuration太大了。 一定会有更好的办法! 澄清:我需要从服务器上提供的100个随机IP地址之一发出的请求。 目标服务器将看到来自100个地址之一的代理请求。 HAProxy或其他替代scheme会更适合这种任务吗? 简化的nginxconfiguration: # nginx proxies all requests to one of these servers upstream cluster { # one server line for every server block configured below server 127.0.0.1:8000; server 127.0.0.1:8001; # 18 more… least_conn; keepalive 16; } # one server block for every source ip address configured […]

ngx_http_auth_request_module等价于HAProxy

对于HAProxy或Apache,是否存在与nginx的ngx_http_auth_request_module等效的模块? 该模块允许通过HTTP支持自定义身份validation。 我引用: ngx_http_auth_request_module模块(1.5.4+)根据子请求的结果实现客户端授权。 如果子请求返回2xx响应码,则允许访问。 如果返回401或403,则访问被拒绝,并显示相应的错误代码。 子请求返回的任何其他响应代码都被认为是错误的。