在尝试将HAProxy用于处理N个请求后,将其配置为关闭客户端TCP连接。我的目标是让长期使用的客户端偶尔重新建立连接,否则这些连接将通过HTTP Keep-Alive保持活动状态。
基本上,我正在尝试实现等效于nginx的keepalive_requests(http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests)。
我目前有类似的东西:
frontend https-in
bind *:443 ssl crt /etc/ssl/private/cert.pem
stick-table type binary len 32 size 1000 expire 75s store gpc0
acl close_connection sc0_get_gpc0 gt 3
acl exceeded_connection sc0_get_gpc0 gt 4
http-response set-header Connection Keep-Alive unless close_connection
http-response set-header Keep-Alive timeout=75\ max=3 unless close_connection
http-response set-header Connection Close if close_connection
timeout http-keep-alive 75s
timeout client 75s
tcp-request content track-sc0 ssl_fc_session_id
tcp-request content reject if exceeded_connection
http-request sc-inc-gpc0
default_backend https
backend https
option httpchk GET /health
server localhost 127.0.0.1:8080 maxconn 1000
但是与此相关的一些问题包括:
Connection: Close
),这突然关闭了与客户端的连接是否有针对此类情况的推荐方法?理想情况下,我想:
src
来跟踪计数器,以避免在同一IP中建立多个连接的情况Connection: Close
)但是我无法找到实现这两种方法的方法。
谢谢!
修改
通过创建src,src_port,dst,dst_port的元组哈希,我能够设计出更好的方法来跟踪唯一的TCP连接:
http-request set-header X-Unique-Id %[src]:%[src_port]:%[dst]:%[dst_port]
http-request set-header X-Unique-Id-SHA %[req.fhdr(X-Unique-Id),sha1]
http-request track-sc0 req.fhdr(X-Unique-Id-SHA)
我不必为必须创建虚拟头而疯狂,但这似乎行得通。