Questions tagged «haproxy»

HAProxy是一个开源,非常快速且可靠的解决方案,可为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理。它特别适合于在需要持久性或Layer7处理的情况下在非常高的负载下进行爬网的网站。


6
为什么没有可水平扩展的软件负载均衡器来平衡SSL的示例?
关于ssl,本地会话和负载平衡,我有很多问题似乎相互关联,因此对于这个问题的长度,我事先表示歉意。 我有一个使用基于文件的会话的网站。该站点的性质是,大多数站点是http,但是某些部分是ssl。当前,由于基于文件的会话,任何ssl请求都必须与以前的http请求命中同一台服务器。 由于时间限制,我想做最简单的事情来平衡增加的http和ssl流量。 粘性负载平衡算法似乎有2个选择: 基于IP 基于cookie 基于ip的解决方案可能会起作用,但是当服务器关闭或添加服务器时,哈希算法可能会更改用户访问的服务器,这在当前基于文件的会话设置中是不希望的。我还假设用户在浏览网站时合法地更改ips在技术上是可能的。 基于cookie的算法似乎更好,但是用ssl加密时无法检查cookie似乎存在其自身的问题。 我一直在搜索有关如何对ssl进行负载平衡的示例,但似乎找不到任何可以进行基于cookie的负载平衡并且可以通过添加另一个ssl解码器来处理增加的ssl负载的设置的显式示例。 我见过的大多数显式示例在浏览器客户端和负载平衡器之间都装有ssl解码器(通常是硬件,apache_mod_ssl或nginx)。这些示例通常看起来像这样(从http://haproxy.1wt.eu/download/1.3/doc/architecture.txt修改): 192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | +-+-+ +-+-+ +-+-+ +-+-+ +-+++ | LB1 | | A | | B | | C | | D | + ----- + …

4
Windows 2008 Server上的死网关检测
我们最近为stackoverflow.com实现了HAProxy。我们决定使用TProxy来维护客户端连接的源地址,因此依赖于客户端IP地址的日志和其他IIS模块将不需要修改。因此,实际上是来自本地网络上的本地192.168.xx HAProxy IP,这些数据包仿佛来自外部Internet IP地址一样被欺骗。 我们的两个Web服务器都有两个NIC-一个在公共Internet上具有静态IP,DNS和默认网关的可路由B类地址,以及一个配置有默认网关的私有不可路由C类地址,该默认网关指向HAProxy的私有IP。HAProxy具有两个接口-一个公共接口和一个私有接口,并执行在接口之间透明地路由数据包并将流量定向到适当的Web服务器的工作。 以太网适配器Internet: 说明。。。。。。。。。。。:网卡#1 DHCP已启用。。。。。。。。。。。:否 自动配置已启用。。。。:是的 IPv4地址。。。。。。。。。。。:69.59.196.217(首选) 子网掩码 。。。。。。。。。。。:255.255.255.240 默认网关 。。。。。。。。。:69.59.196.209 DNS服务器。。。。。。。。。。。:208.67.222.222 208.67.220.220 通过Tcpip的NetBIOS。。。。。。。。:已启用 以太网适配器专用本地: 说明。。。。。。。。。。。:网卡#2 DHCP已启用。。。。。。。。。。。:否 自动配置已启用。。。。:是的 IPv4地址。。。。。。。。。。。:192.168.0.2(首选) 子网掩码 。。。。。。。。。。。:255.255.255.0 默认网关 。。。。。。。。。:192.168.0.50 通过Tcpip的NetBIOS。。。。。。。。:已启用 我们已在每个Web服务器上禁用了自动指标,并为可路由的公共类B分配了10的指标,而为私有接口分配了20的指标。 我们还设置了以下两个注册表项: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "DeadGWDetectDefault"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "EnableDeadGWDetect"=dword:00000000 大约每天两次,我们会看到其中一台Web服务器无法联系DNS或无法与公共Internet上的任何其他服务器建立连接的问题。 我们怀疑无效网关检测错误地检测到公共网关上的中断,并且正在将所有流量切换到此时没有DNS访问但无法进行验证的专用网关。 有没有办法知道是否正在运行死网关检测甚至Windows 2008 Server中的某个选项? 如果是这样,是否可以在Windows 2008 Server中禁用死网关检测? 如果不能,是否有其他原因导致我们失去解析DNS或短时间连接的能力?

2
具有SNI和不同SSL设置的HAProxy
我的两个站点都有HAProxy,其中一个是公共站点,另一个是私有站点。 www.mysite.com private.mysite.com 自动取款机,我正在像这样使用haproxy: frontend mysite_https bind *.443 ssl crt /etc/mycert.pem ca-file /etc/myca.pem verify optional no-sslv3 mode http acl domain_www hdr_beg(host) -i www. acl domain_private hdr_beg(host) -i private. acl path_ghost path_beg /ghost/ acl clientcert ssl_c_used redirect location https://www.example.com if path_ghost !clientcert redirect location https://www.example.com if !domain_www !clientcert use_backend bknd_private if …
9 ssl  haproxy  sni 

1
我认为该HAProxy的“重新启动脚本”是否可以正常运行?
我从各个地方整理了这个脚本。我希望一旦运行它将执行以下操作: 暂停端口80和443的所有“新” http流量-只需“暂停”它们,不要出现任何错误 完成所有“处理中”的请求后,优雅地重新启动haproxy 取消暂停http流量并继续照常营业。 这是怎么运行的?我错过了什么吗?我们有成千上万个基于ip的acl规则,存储在haproxy引用的文件中,我们需要每分钟重载几次。 #!/bin/sh # hold/pause new requests iptables -I INPUT -p tcp --dport 80 --syn -j DROP iptables -I INPUT -p tcp --dport 443 --syn -j DROP sleep 1 # gracefully restart haproxy /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) # allow new requests to …

1
HAProxy基本体重问题
分配给服务器的权重是否仅影响特定后端内的平衡? 第一次实现权重时,如果我给后端中的所有服务器提供相同的编号,那与以前没有权重的情况一样吗? 如何通过按一定量调整权重来计算我要消耗的流量。例如: 服务器web1 10.10.10.10重量100 服务器web2 10.10.10.11重量100 服务器web3 10.10.10.12重量90 服务器web4 10.10.10.13重量90

1
HAProxy 1.7统计信息设置
我已经尝试了多个Web教程来启用HAProxy统计信息(只是google haproxy统计信息并尝试了前10个链接),但是我相信这些都是针对较旧的HAProxy版本的。我在Ubuntu 16.04 LTS上运行1.7。 这是我的/etc/haproxy/haproxy.cfg文件(其中包括Datadog提供的有关启用统计信息的说明)。 如果我删除了listen ....块,则它开始正常。当它在那里时,我得到以下错误: sudo service haproxy stop sudo service haproxy start Job for haproxy.service failed because the control process exited with error code. See "systemctl status haproxy.service" and "journalctl -xe" for details. journalctl和systemctl输出均显示“服务启动得太快错误 haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: …
8 haproxy 

2
如何为多个SSL证书配置HAProxy
我需要为HAProxy配置两个不同的SSL证书 www.example.com api.example.com 现在,我从关于serverfault的文章(在Haproxy中配置多个SSL证书)中学到了如何使用2个证书,但是服务器继续使用两个域中提到的第一个证书。 配置: frontend apache-https bind 192.168.56.150:443 ssl crt /certs/crt1.pem crt /certs/cert2.pem reqadd X-Forwarded-Proto:\ https default_backend apache-http backend apache-http redirect scheme https if { hdr(Host) -i www.example.com } !{ ssl_fc } redirect scheme https if { hdr(Host) -i api.example.com } !{ ssl_fc } ... 如何根据URL告诉HAProxy使用哪个证书? 完整配置: global log …

2
在SSL终止负载平衡器(haproxy)后面时,nginx try_files使用错误的方案进行重定向
我有一个nginx 1.6.2服务器,作为后端执行SSL终止的负载平衡器。与后端服务器的所有通信均通过HTTP。 发生的情况的图表: /--http---> frontend:80 --\ client --+ +--http---> backend:8000 \--https--> frontend:443 --/ LOAD BALANCER BACKENDS 出于测试目的,目前我只有一个后端。负载平衡器运行HAProxy 1.5,我可以控制它。 我在后端nginx配置中的块中有一个非常典型的try_files指令server: server { server_name frontend; ... try_files $uri $uri/ =404; ... } 现在,默认情况下,当我访问不带斜杠的目录时,例如https://frontend/somedir,nginx希望发送HTTP 301重定向到绝对URL,例如http://frontend:8000/somedir/。 我可以使用来使nginx省略8000端口号port_in_redirect off。 但是,我似乎无法http://在nginx生成的重定向开始时更正该方案。我能使Nginx最好做的是从重定向https://frontend/somedir到http://frontend/somedir/有效地剥离SSL! 负载平衡器正在发送X-Forwarded-Proto标头,但是在设计其重定向时,nginx找不到任何方式来查询它;实际上,有一个2012年的回答说nginx不能完全做到这一点,解决方案是用nginx替换负载平衡器。恕我直言,这太琐碎了,以至于不能保证如此大的堆叠变化。 自2012年以来,这里有什么变化吗?我并不是真的想在HAProxy级别上重写这些重定向:从Web应用程序到HTTP重定向的实际故意HTTPS可能会获得“ re-HTTPSed”,如果我只是总是重写Location:响应头的方案以使其与方案相同提出要求。 编辑: 这是一个最小化的配置,显示nginx生成绝对Location:URL。请注意,没有重写。 user nobody nobody; worker_processes auto; worker_rlimit_nofile 4096; error_log /var/log/nginx/error.log warn; …
8 nginx  haproxy 

1
具有子域设置的Haproxy设置
希望有人可以帮助确认这是否可行?我正在尝试将3个子域流量路由到同一haproxy主机; 这是我的设置 具有一个接口ip 10.10.10.100和dns名称haproxy01.mydomain.com的haproxy 3条与之相关的CNAME记录;sub1.mydomain.com,sub2.mydomain.com和sub3.mydomain.com 所有传入流量都用于端口443。 可以说,有两个后端应用程序服务器在三个端口8081、8082、8083上接受流量。 用于8081的sub1.mydomain.com用于8082的sub2.mydomain.com和用于8083的sub3.mydomain.com 该应用程序仅需要为端口8081的流量提供SSL传递,所以我认为我必须为其使用tcp模式,而针对8082和8083的其他流量也应使用SSL,但可以在Haproxy处将其终止,但是对于测试,我使用了所有TCP模式。 我的配置部分实现了以下内容; #Application Setup frontend mytraffic bind *:443 mode tcp acl host_sub1 hdr(host) -i sub1.mydomain.com acl host_sub2 hdr(host) -i sub2.mydomain.com acl host_sub3 hdr(host) -i sub3.mydomain.com use_backend sub1_nodes if host_sub1 use_backend sub2_nodes if host_sub2 use_backend sub3_nodes if host_sub3 option tcplog backend sub1_nodes mode …

2
HAProxy切换到出现500个错误和/或服务器关闭时进行备份
我在只有2个后端服务器的前面设置了HAProxy,并进行了特殊配置:任何请求都应发送到服务器A;但是,如果服务器A返回5xx错误代码,则所有请求都应转到备份服务器B。当A返回“启动”时,所有请求都应转到A。 我正在尝试此配置: backend example_cluster balance roundrobin option httpclose option forwardfor option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com http-check disable-on-404 default-server error-limit 1 on-error mark-down redirect scheme https if !{ ssl_fc } server node1 1.2.3.4:80 check observe layer7 server node_back 5.6.7.8:443 backup ssl verify none 但这不起作用有两个原因: 即使node1(A)已启动,所有请求也都路由到服务器node_back(B)。 似乎没有对服务器A执行任何httpcheck;或更好,在syslog中,我看不到有关服务器A关闭的任何错误。 如果删除“ option httpchk”行以及该行下面的两行;并且我还删除了服务器A中的“观察层7”;HAProxy通过将所有请求路由到节点A来工作。但是,显然,当服务器A返回500时,HAProxy不会切换到B。因此,我假设问题可能出在选项httpchk配置中。

2
扩展HAProxy以支持超过64k的WebSocket
我们正在尝试设计一种能够处理超过64k WebSocket的体系结构。 我们首先尝试使用Amazon ELB,但其设计不允许流量或Websocket意外增加。(TCP模式意外使WebSocket超时) 使用HAProxy时,这些限制将不适用,但我们仅限于在HA与后端服务器之间维护的约64k websocket。 我想到了多种解决方案: 多个HAProxy实例,使用DNS进行负载平衡(Route53具有加权选项) 两个具有Keepalived,多个内部IP地址的HAProxy实例(不确定它是否可行) 有一个更好的方法吗 ?

1
配置haproxy以针对特定ACL匹配返回204
如果有人尝试访问Web服务器上的特定路径,我想返回HTTP 204错误代码。我可以将其中一个Web服务器设置为返回204错误,并将haproxy指向它作为后端。但是,由于没有信息被发送,我认为这可以通过haproxy本身来完成。无需打扰我的实际Web服务器。 我尝试创建一个后端,该后端将生成204错误,如下所示: frontend ... ... acl is_always204 path_beg /thisone use_backend always204 if is_always204 ... backend always204 errorfile 404 /etc/haproxy-shared/errors/204.http 204.http文件包含: HTTP/1.0 204 No Content Cache-Control: no-cache Connection: close Content-Type: image/png 启动haproxy时,出现以下错误: parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored. 我想我可能会走错路了。谁能建议一种方法来强制haproxy在给定的acl匹配中返回204?
8 haproxy 


5
haproxy-在TCP模式下传递原始/远程IP
我已经设置了带有keepalived的haproxy,以实现percona群集的负载平衡和ip故障转移,并且由于它工作得很好,我想对另一个服务/守护程序使用相同的lb /故障转移。 我已经通过以下方式配置了haproxy: listen my_service 0.0.0.0:4567 mode tcp balance leastconn option tcpka contimeout 500000 clitimeout 500000 srvtimeout 500000 server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3 server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3 负载平衡工作正常,但是服务看到的是负载平衡器的IP,而不是客户端的实际IP。在http模式下,让haproxy传递到远程IP是很容易的,但是在tcp模式下该如何做呢?由于需要负载均衡的服务的性质,这一点至关重要。 谢谢!维托

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.