我想弄清楚如何使用 haproxy 和 SSL 反向代理设置 SSL 场,我正在寻找一些一般性建议:
是否有可能满足以下所有条件:
如果所有这三个都不可能,我想知道权衡可能是什么。现在我正在考虑类似以下的事情,但这可能会改变:
Haproxy 443 TCP 代理前端 -> 高端口上的 SSL 代理(可能是 Nginx) -> Haproxy HTTP 前端 -> 网络服务器
我意识到我可能可以跳过第二跳回到 haproxy,但是 HAproxy 中所有事物的单一视角可能很好。另外,如果我必须使用 TProxy,也许从 SSL 场返回 haproxy 会使路由更简单?
参考资料:
http : //haproxy.1wt.eu/download/1.5/doc/configuration.txt
http://1wt.eu/articles/2006_lb/index_05.html
是否可以在一个后端检查两个条件?例子
backend web-static
option httpchk GET /path/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
option httpchk GET /path2/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
server appsrv1 192.168.1.10:80 check inter 3000 weight 1
Run Code Online (Sandbox Code Playgroud) 我在 haproxy 日志中看到类似于以下内容的错误:
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51940 [18/Jul/2011:17:05:24.339] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6001 408 212 - - cR-- 100/89/0/0/0 0/0 "<BADREQ>"
Jul 18 17:05:30 localhost haproxy[8247]: 188.223.50.7:51943 [18/Jul/2011:17:05:24.341] http_proxy_ads http_proxy_ads/<NOSRV> -1/-1/-1/-1/6000 408 212 - - cR-- 99/88/0/0/0 0/0 "<BADREQ>"
Run Code Online (Sandbox Code Playgroud)
等等...
到目前为止,我已经尝试增加客户端超时(从 3 到 6 秒),并将 http 请求缓冲区从 16k 增加到 32k。错误仍然出现。
任何人都可以指导我在这里寻找什么吗?
我正在对不同的负载平衡选项进行负载测试,但从 Nginx、haproxy 和 varnish 得到的结果很差。我在 Rackspace 有一个 4GB 的负载均衡器,可以运行 4x1GB 的应用服务器。
我正在访问一个名为“/slow”的 url,它在响应之前故意等待 500 毫秒。如果我直接访问应用程序服务器,它可以处理每秒 1600-1800 的连接速率。
如果我打 Nginx 负载均衡器,它只能处理大约 2000 个连接。我希望有更接近 4x1600 = 6000 的东西。下面是我用来测试它的命令。这是在 40 256 MB 实例上并行运行的。我特意将 num_call 设置为 1,因为我想看看连接性能。任何高于此值,我就会开始出现很多错误。
httperf --server 50.56.80.227 --port 1555 --uri /slow --rate 50 --num-call 1 --num-conn 100 --timeout 5
Run Code Online (Sandbox Code Playgroud)
这是我的 nginx 配置:https : //gist.github.com/1299501
所以,奇怪的是,无论我使用 nginx、haproxy 还是 varnish,我都会得到大致相同的结果。然而,我测试了 Rackspace 的新云平衡器,它们获得了更好的性能(在 7000/s 时表现良好)。由于 nginx 和其他都在我设置的实例上运行,而机架空间平衡器不是,我猜系统有问题。我宁愿使用我控制的平衡器,这样我就可以向其中添加缓存、gzip、ssl 和其他内容。
我怎样才能找出瓶颈是什么?有什么我应该在系统上调整以获得更好的性能吗?我需要超过 4GB 的内存吗?(测试过程中Ram使用率不高)。还有其他随意的想法吗?
更新:我只是将平衡器调整为 8GB,它的性能要好得多,高达 6000-7000,或者与机架空间平衡器相当。这没有任何意义,因为它之前没有耗尽 RAM。
更新:这是我重载平衡器时 httperf 的输出示例(在 8GB 版本上,比我之前能够运行的要高,但错误类似):https …
使用 HAProxy,我想创建以下设置:
我无法弄清楚如何在不依赖于设置默认服务器的情况下匹配 root,然后否定所有请求转到 server1 规则。
如何使用 HAProxy 表达上述内容?
正则表达式可能是解决此问题的方法,但我对正则表达式并不擅长,因此很难提出基于它的解决方案。
我最近接管了一个使用 HAProxy 的环境,我正在尝试了解配置及其含义,但我发现它的某些方面不清楚。
我认为上面的意思是,如果主机头以“foo.bar.com”开头,则使用 cdn cdn_name,但我不完全确定。有人可以为我确认吗?
谢谢!
使用 haproxy-1.5,我有以下部分配置:
acl is_api hdr(host) -i api.example.com
acl is_app hdr(host) -i app.example.com
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的请求与如下所示的请求不匹配:
GET / HTTP/1.1
Host: api.example.com:80
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要这样做:
acl is_api hdr(host) -i api.example.com
acl is_api hdr(host) -i api.example.com:80
acl is_app hdr(host) -i app.example.com
acl is_app hdr(host) -i app.example.com:80
Run Code Online (Sandbox Code Playgroud)
啊。不!恨!
有没有更好的方法来做到这一点?我可以告诉 haproxy 忽略主机头中的端口吗?
HAProxy 似乎并没有保持与服务器的连接平衡。
请记住这一点:
如图所示,服务器 C 和 D 的连接似乎比其他服务器多。由于这种额外的负载,它们会继续下降并自动重新启动。

我尝试阅读 HAproxy 官方文档并进行了一些谷歌搜索,但没有发现任何有用的信息。希望这里有人可以提供帮助。
几个问题:
为什么当配置说使用 roundrobin、服务器规格相同并且没有应用权重时会出现这种情况?
什么决定了“会话”列中的“最大”子列(表示 1970、1444 等的那个)。服务器 C、D、E 在 3K 范围内,其他 2 个在 2K 以下。为什么会有差异?
如何让这一切保持平衡?
有人可以解释每一列吗?我很惊讶 HAproxy 的官方文档并没有真正解释它。
抱歉,如果之前有人问过这个问题,但我似乎找不到太多关于它的信息。
我们将使用 HAProxy 来平衡我们的 MariaDB Galera 集群。我在这方面看到的所有文章/教程都使用 Keepalived(或类似的东西)进行主动/被动 HAProxy 设置。
有什么好的理由为什么你不应该有一个主动/主动设置?
每个 HAProxy 节点都可以有一个固定的 IP,并且都有一个浮动的 IP。在正常情况下,请求在两个 HAProxy 节点之间共享,如果一个节点宕机,另一个将使用它的浮动 IP 并处理两个 IP 下的请求。当另一个恢复时,它会再次获取其浮动 IP 和负载份额。
我很感激你对此的意见。
卢克
我想将大约 100 多个站点从一台服务器迁移到另一台服务器。当前计划是逐渐为每个添加一个 acl,因为它们被移动以将流量引导到新服务器。
这是一个简化的例子
front http_frontend
bind *:80
acl is_new hdr_end(host) -i sub1.domain.com
acl is_new hdr_end(host) -i sub2.domain.com
acl is_new hdr_end(host) -i www.domain2.com
mode http
# etc
use_backend web1 if is_new
default_backend legacy1
Run Code Online (Sandbox Code Playgroud)
一旦他们都被感动了,我们就会改变 default_backend
有没有办法从另一个文件中读取这些 acl?或者从文件中读取域 - 也许像这样?
acl is_new hdr_end(host) -i /path/to/file
Run Code Online (Sandbox Code Playgroud)
例如,我将所有安全证书包括在下面,这样的东西会很棒!
bind *:443 ssl crt /etc/haproxy/certs.d
Run Code Online (Sandbox Code Playgroud)
如果没有,这不是世界末日,它只是美好而整洁:)。