Articles of haproxy

HAPROXY后面的mod_evasive

我有一个HAPROXY安装后面的几台Apache 2机器,我试图在这些Apache机器上设置mod_evasive,同时使用mod_rpaf获取真正的X-FORWARDED客户端IP。 出于某种原因,mod_evasive抓取和阻止一些ips(用ApacheBenchtesting),但有些可以继续,打开更多的连接,基本上DOS我的服务器。 任何想法可以排除一个在mod_evasive另一个IP? 考虑到它背后的代理,真正的客户端IPS是可见的Apache日志? 当DOSWhitelist设置为我们的子网掩码(例如192.168。)时,mod_evasive的定义是默认的。 rpaf模块具有我们的HAPROXY ip的RPAFproxy_ips定义。 有任何想法吗?

haproxy:有没有办法将acls分组以提高效率?

我在前端有一些逻辑,根据主机和url路由到不同的后端。 逻辑上看起来像这样: if hdr(host) ends with 'a.domain.com': if url starts with '/dir1/': use backend domain.com/dir1/ elif url starts with '/dir2/': use backend domain.com/dir2/ # … else if ladder repeats on different dirs elif hdr(host) ends with 'b.domain.com': # another else if ladder exactly the same as above # … # … else if ladder repeats […]

重新启动Haproxy优雅

根据各种博客,可以使用以下命令正常重启HAproxy: sudo haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) 为了validation这一点,我build立了一个连续发送消息给haproxy的apache脚本脚本。 理想情况下,每当我重新启动我的服务器的脚本不应该有一个影响的Apache的一个执行。 但是,似乎每当Haproxy重新启动Apache脚本脚本终止和负载平衡器的连接丢失。 这里是我的HaProxyconfiguration文件的细节: global nbproc 4 log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #chroot /usr/share/haproxy user haproxy group haproxy daemon pidfile /var/run/haproxy.pid stats socket /home/ubuntu/haproxy.sock #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 […]

用HAProxy分组networking会话

我想用HAProxy来平衡Web请求。 问题是,我希望特定的用户组总是去同一台服务器。 (这是一个多人游戏系统,同一组中的用户需要在同一台服务器上)。 只要具有相同组ID的用户在同一台​​服务器上,用户就可以访问任何服务器。 服务器甚至可以改变(例如,如果服务器停机),但是该组的所有用户必须切换到新的服务器。 应用服务器将用cookie标识用户的分组。 作为一个具体的例子,假设我的应用程序有一个编号为1..10000的cookie GROUP_ID。 可能有3个不同的GROUP_ID = 1的用户,3个不同的GROUP_ID = 2的用户等。假设我在服务器上设置了负载均衡:app1,app2,app3。 我想看到的是类似的东西: 所有GROUP_ID = 1个用户都转到app1 所有GROUP_ID = 2个用户都转到app2 所有GROUP_ID = 3个用户都转到app3 所有GROUP_ID = 4个用户都转到app1 所有GROUP_ID = 5个用户都转到app2 等等 如果服务器app1变得没有反应,那么我想看到app1用户在app2和app3之间重新分配。 (如果所有的团体都重新洗牌,那就没问题了)。 来自特定组的所有用户仍应位于通用服务器上。 显然,网站的初始请求不会有cookie,但一旦用户authentication,他们将被分配cookie。 HAProxy是否支持这种自定义负载平衡?

与HAProxy请求发球

我正在使用HAProxy来负载均衡TCP服务。 我想将同一个请求“发球”到不同的集群(dev实例)。 HAProxy是否具有“T恤”function? dev,prod集群和HAProxy是不同的子网,所以我不能使用iptables的“tee”function。

HAProxy听两个参数?

我一直使用双参数语法来看HAProxyconfiguration示例。 事实上,1.4.18提供的默认configuration文件包含这个: listen appli1-rewrite 0.0.0.0:10001 cookie SERVERID rewrite balance roundrobin server app1_1 192.168.34.23:8080 cookie app1inst1 check inter 2000 rise 2 fall 5 server app1_2 192.168.34.32:8080 cookie app1inst2 check inter 2000 rise 2 fall 5 server app1_3 192.168.34.27:8080 cookie app1inst3 check inter 2000 rise 2 fall 5 server app1_4 192.168.34.42:8080 cookie app1inst4 check inter 2000 rise […]

Haproxy限速,conn_rate,conn_cur

试图通过以下方式实现haproxy 1.5-18的速率限制: frontend stick-table type ip size 100k expire 30s store conn_rate(3s) #connection rate stick-table type ip size 1m expire 10s store gpc0,http_req_rate(10s) #http req rate stick-table type ip size 100k expire 30s store conn_cur #concurrent connections tcp-request connection track-sc1 src tcp-request connection reject if { sc1_conn_rate ge 20 } tcp-request connection reject if { […]

HAProxy不接受重新发布的GeoTrust证书

根据Heartbleed错误,我要求重新颁发GeoTrust证书。 我们使用启用了OpenSSL的HAProxy 1.5-dev22 。 我已经在所有受影响的实例上更新了OpenSSL。 HAProxy要求的PEM是证书,中间证书和私钥的连接版本: —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– —–BEGIN CERTIFICATE—– … —–END CERTIFICATE—– —–BEGIN PRIVATE KEY—– … —–END PRIVATE KEY—– 我可以用OpenSSLvalidation这个PEM: $ openssl verify -CAfile my_app.pem my_app.pem my_app.pem: OK 然后configurationHAProxy: …snip… bind *:443 ssl crt /etc/ssl/certs/my_app.pem ca-file /etc/ssl/certs/my_app.pem …snip… 然后启动HAProxy $ sudo service haproxy start * Starting […]

在持续高负荷下服务的常见背压策略

我想知道什么是人们使用他们的networking服务常见的背压战略? 想象一下,你的服务在重负载下运行,并且在某个时候负载达到你容量的120%。 你怎么处理这个? 我能想到的最好的策略是开始拒绝连接。 所以,如果一个主机达到了最高容量(例如,所有Apache员工都很忙),我会开始拒绝TCP连接,直到其中一个工作人员释放。 通过这种方式,所有被接受的连接都将被立即处理而不需要排队(所以延迟很小),过多的20%被拒绝,允许负载均衡器重新分配给其他主机或执行任何其他的负载减less策略(例如,redirect到静态/caching内容)。 我认为这种快速的方法比任何排队方式都要优越得多。 小的队列可以吸收短暂的stream量爆炸,但是由于过多的排队,您的系统在重负载下可能会失败。 例如,在没有任何AQM的FIFO队列处理的情况下,当所有处理的请求在客户端已经超时时,它可以进入状态,因此系统不进行前进。 我感到惊讶的是,这个策略听起来并不容易实现。 我的方法是在Web服务器上设置一个小的收听积压,期待所有不适合的连接被拒绝。 但是由于Linux内核2.2的变化,这种策略分崩离析(参见http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html )。 较新的Linux内核无条件地接受你的连接。 SYN-ACK响应被发送到客户端,根本不考虑监听积压大小。 启用tcp_abort_on_overflow选项也没有多大帮助。 这个选项使内核在连接不适合接受队列时发送RST,但此时客户端已经考虑了连接ESTABLISHED并可能已经开始发送数据。 这对HAProxy尤其有问题。 如果连接成功build立,它不会将请求重新发送到其他服务器,因为这个请求可能在服务器上有一些副作用。 所以我想我的问题是: 我试图执行这样的事情是我奇怪的吗? 有什么其他的策略来处理持续高负荷,你可以推荐? 是Linux内核的tcp_abort_on_overflow中断,应该应用于半开放队列吗? 提前致谢!

如果req.url匹配,如何删除varnishncsa日志

我有几个负载均衡器,都对许多清漆实例执行健康检查。 清漆端的健康检查包括匹配请求方法和URL以返回200响应。 if (req.method == "GET" && req.url == "/ping") { return(synth(200, "OK")); } 使用HAProxy我有健康检查configuration为在后端服务器上轮询/ ping。 这在varnishncsa中产生了很多消息。 是否有可能以某种方式删除日志条目进入varnishncsa,如果他们匹配某个req.url?