HAProxy 重置后端连接

HAProxy 重置后端连接

我正在设置一系列服务器作为我们应用程序服务器的代理,主要是为了模糊应用程序服务器的 IP,作为一套反 DDOS 措施的一部分。

我的目标是让 HAProxy 接受短暂的 HTTP/1.0 连接并通过持久连接将它们转发到后端,从而显著减少连接过程、慢启动等造成的开销损失。

我已经部分实现了此配置,但仍然看到后端的连接率比预期高得多 - 经调查,似乎每个后端连接都在处理 1 到 5 个请求,然后由 HAProxy 端重置。

这些重置数据包总是在从服务器完全收到响应之后、在发送任何进一步请求之前发生,并且它们发生在看似随机的延迟之后 - 有时短至 0.1 秒,有时长达 20 秒。更改 HAProxy 的超时设置似乎没有效果。

有谁知道是什么原因导致 HAProxy 出现这种行为,或者我如何更好地调试它?

编辑:忘了说了,我无法让后端生成任何有意义的日志,即使使用 tcplog

配置(已删除):

global
    log /dev/log    local0
    log /dev/log    local1 notice
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    maxconn 16384
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option  http-keep-alive
    timeout connect         5s
    timeout client          50s
    timeout server          50s
    timeout http-keep-alive 50s
    timeout http-request    30s
    maxconn 4000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http
    # Temporary setting, egress is fragile w/ high rate of connections
    default-server maxconn 200

frontend fe-web
    bind 0.0.0.0:80
    acl cloudflare src -f /etc/haproxy/cloudflare_ips

    block if !cloudflare

    use_backend be-web

frontend fe-legacy
    bind 0.0.0.0:29080
    option forwardfor header CF-Connecting-IP

    use_backend be-legacy

backend be-web
    server srv-web 46.105.16.9:34020 check
    option httpchk HEAD / HTTP/1.1\r\nHost:\ legacy-domain

backend be-legacy
    server srv-legacy 46.105.16.9:34020 check
    option httpchk HEAD / HTTP/1.1\r\nHost:\ legacy-domain

相关内容