Haproxy
HaProxy 1.8 - 粘貼表格並將 haproxy 計算的費率作為請求標頭傳遞給後端
我讀過這篇關於棍子表的文章:https ://www.haproxy.com/blog/introduction-to-haproxy-stick-tables/
我想在我的 haproxy 配置中添加速率限制。但是在我想添加一個硬限制之前,我想知道我的每個客戶提出了多少請求,以便了解一個好的限制門檻值是多少,並能夠在添加為之前聯繫超過此限制的客戶硬性限制。
我的後端已準備好在自定義級別上儲存和記錄這些類型的資訊。在步驟 1 中我需要做的就是讓 haproxy 傳遞以下值:
- Request rate per ip (http_req_rate) 描述了每X次的http請求數(用來防止http泛洪)
- Connection rate per ip (conn_rate) 它描述了新連接的數量(當使用 keep alive 時,這個數字會與 http_req_rate 不同)(用於防止 tcp syn flood)
- 每個 ip 的目前連接數 (conn_cur)(用於防止連接表耗盡)
我做了以下配置來完成這項工作:
(global, listen, default and frontend sections not relevant) // # round robin balancing between the various backends backend app # Bind the 3 stick-tables counting to 3 slots named track-sc0, -sc1 and -sc2 http-request track-sc0 src table sticktable_st_src_http_req_rate http-request track-sc1 src table sticktable_st_src_conn_cur http-request track-sc2 src table sticktable_st_src_conn_rate # Save current values in variables to be able to parse them on to backends http-request set-var(req.http_req_rate) sc_http_req_rate(0) http-request set-var(req.conn_cur) sc_conn_cur(1) http-request set-var(req.conn_rate) sc_conn_rate(2) # Finally copy the variables into request headers for the real backends to read the values http-request set-header X-HaProxy-http_req_rate %[var(req.http_req_rate)] http-request set-header X-HaProxy-conn_cur %[var(req.conn_cur)] http-request set-header X-HaProxy-conn_rate %[var(req.conn_rate)] ... server localtest 192.168.1.130:80 check backend sticktable_st_src_http_req_rate stick-table type ip size 1m expire 10s store http_req_rate(10s) backend sticktable_st_src_conn_cur stick-table type ip size 1m expire 10s store conn_cur backend sticktable_st_src_conn_rate stick-table type ip size 1m expire 10s store conn_rate(10s)
即使這實際上完成了這項工作,但當有 3-5 個後端部分都需要它時,它變得有點混亂。
另一件事是它看起來不是很聰明,
1)定義三個後端 2)在 3 個跟踪命令中使用這三個後端 3)將它們複製到臨時變數中(因為我不知道如何將它們直接解析為請求標頭 4)在設置請求標頭時參考臨時變數。
可以以任何方式壓縮或簡化此配置以使其看起來更乾燥嗎?
HaProxy 1.8 版
謝謝
如果您只想查看棒表值,可以使用執行時 API(stat 套接字):https ://www.haproxy.com/blog/dynamic-configuration-haproxy-runtime-api/並使用“顯示表<表名>”命令。
關於您的配置:
- 您不需要為每個計數器設置單獨的表。您可以將所有計數器儲存在同一個表中。
2.不需要使用中間變數
backend app # Enable counters tracking http-request track-sc0 src table sticktable_st_src_rates # Put counters in HTTP headers http-request set-header X-HaProxy-http_req_rate %[sc_http_req_rate(0)] http-request set-header X-HaProxy-conn_cur %[sc_conn_cur(0)] http-request set-header X-HaProxy-conn_rate %[sc_conn_rate(0)] ... server localtest 192.168.1.130:80 check backend sticktable_st_src_rates stick-table type ip size 1m expire 10s store http_req_rate(10s),conn_cur,conn_rate(10s)