我无法让Haproxys http-buffer-request 选项工作。我正在使用 Haproxy 1.6.5。这是我的配置:
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
Run Code Online (Sandbox Code Playgroud)
但是,请求不会在 Haproxy 中缓冲,而是直接发送到应用程序:
我正在使用 Unicorn 运行 Ruby 应用程序。如果 Unicorn 工作人员处理请求的时间超过 10 秒,他们就会被杀死。我正在使用 Chrome 上传文件,并在开发工具中限制带宽。我希望 Haproxy 缓冲 POST 请求,直到它完成,然后才将它分派到 Ruby 应用程序。但事实并非如此。我不知道我做错了什么。任何帮助都受到高度赞赏。
tldr; 它没有。使用NGinX。
同时,我从 Haproxy 邮件列表中得到了答复。谢谢, Holger 只是为了答复。
(元:我什至不确定邮件列表是否仍然有效,因为我在发布到列表时返回了错误。)
如果我仔细阅读了文档,也许这句话就不会引起我的注意:
放置在前端或后端的此选项强制 HTTP 处理等待,直到接收到整个主体,或者请求缓冲区已满,或者在分块编码的情况下第一个块完成。
这只是意味着 Haproxy 永远不会完全缓冲大型上传主体。邮件列表上的建议是为此使用 NGinX。
我仍然不明白 Haproxy 如何防止慢速 POST 攻击。我认为攻击者只会在第一个块之后放慢数据速率。但这个讨论超出了这个问题。
归档时间: |
|
查看次数: |
3654 次 |
最近记录: |