我无法获得Haproxys http-buffer-request选项的工作。 我正在使用Haproxy 1.6.5。 这是我的configuration:
global maxconn 20000 debug defaults HTTP mode http option http-buffer-request # buffer the whole request before dispatching it to the backend timeout connect 5s timeout client 50s timeout server 50s frontend http bind 127.0.0.1:8123 use_backend api.radioadmin_backend if { hdr(host) -i api.radioadmin.local:8123 } use_backend radioadmin_backend if { hdr(host) -i radioadmin.local:8123 } backend api.radioadmin_backend mode http server api.radioadmin3000 127.0.0.1:3000 check backend radioadmin_backend mode http server radioadmin3001 127.0.0.1:3001 check
然而,这个请求并没有在Haproxy中缓冲,而是直接发送到应用程序:
我正在与Unicorn运行一个Ruby应用程序。 独angular兽的工作人员被杀害,如果超过10秒处理一个请求。 我使用Chrome上传文件,并在开发工具中调节带宽。 我期望Haproxy缓冲POST请求,直到它完成,然后将其分派到Ruby应用程序。 但事实并非如此。 我不知道我在做什么错。 任何帮助,高度赞赏。
tldr; 它不。 使用NGinX。
同时我从Haproxy邮件列表中得到了答案 。 谢谢,Holger只是为了答复。
(Meta:我甚至不确定邮件列表是否仍然有效,因为在列表中发现错误。)
如果我仔细阅读了文档,这句话可能不会引起我的注意:
放在前端或后端的这个选项强制HTTP处理等待,直到接收到整个主体,或者请求缓冲区已满,或者在分块编码的情况下第一个块完成。
这仅仅意味着Haproxy将永远不会缓冲大的上传身体。 邮件列表上的build议是使用NGinX。
我仍然不明白Haproxy如何防止缓慢的POST攻击 。 我认为攻击者只会在第一个数据块后减慢数据速率。 但是这个讨论超出了这个问题。