haproxy 1.8 sc0_get_gpc0 从错误请求计数中激活 acl
haproxy 1.8 sc0_get_gpc0 activate acl from bad request count
我是 运行 HAproxy 1.8 并试图用棍子跟踪一个通用计数器-table,但每次它被 ACL 调用时它都没有返回 true。
我的期望是;一旦计数器超过 5,ACL 将导致它转到不同的后端。可能出了什么问题?
# default block configs are set to http settings
frontend my_service
bind *:80
tcp-request inspect-delay 5s
acl bad_request sc0_get_gpc0(my_service_bk) gt 5
use_backend my_service_bad_bk if bad_request
default_backend my_service
backend my_service_bad_bk
errorfile 503 /etc/haproxy/429.http
backend my_service
http-request track-sc0 req.fhdr(X-My-Service)
http-response sc-inc-gpc0 if { status gt 399 }
stick-table type string len 350 size 10m expire 10m store gpc0
balance roundrobin
server .....
server .....
我查看了 stick-table 统计数据,它在 6 次请求后显示:
0x7f2279cdsa42: key=test use=0 exp=278850 gpc0=6
它仍然发送到错误的后端(my_service
)
移动 stick-table
和 acls
我想出了一个解决方案。在 backend
中,sc0_get_gpc0
似乎可以从 stick-table
中获取正确的内容
工作代码如下所示:
# default block configs are set to http settings
frontend my_service
bind *:80
tcp-request inspect-delay 5s
http-request track-sc0 req.fhdr(X-My-Service)
stick-table type string len 350 size 10m expire 10m store gpc0
default_backend my_service
backend my_service
http-response sc-inc-gpc0 if { status gt 399 }
acl bad_request sc0_get_gpc0(my_service) gt 5
use-server bad_request if bad_reqest
balance roundrobin
server bad_request localhost:9090 weight 0
# normal app servers below this without weight 0
server .....
frontend bad_requests
bind localhost:9090
default_backend my_service_bad
backend my_service_bad
errorfile 503 /etc/haproxy/429.http
在后端执行此操作的关键是对仅提供错误代码和响应的服务器使用 weight 0
。如果 ACL 未激活,具有 weight 0
的服务器将不会用于流量。
我是 运行 HAproxy 1.8 并试图用棍子跟踪一个通用计数器-table,但每次它被 ACL 调用时它都没有返回 true。
我的期望是;一旦计数器超过 5,ACL 将导致它转到不同的后端。可能出了什么问题?
# default block configs are set to http settings
frontend my_service
bind *:80
tcp-request inspect-delay 5s
acl bad_request sc0_get_gpc0(my_service_bk) gt 5
use_backend my_service_bad_bk if bad_request
default_backend my_service
backend my_service_bad_bk
errorfile 503 /etc/haproxy/429.http
backend my_service
http-request track-sc0 req.fhdr(X-My-Service)
http-response sc-inc-gpc0 if { status gt 399 }
stick-table type string len 350 size 10m expire 10m store gpc0
balance roundrobin
server .....
server .....
我查看了 stick-table 统计数据,它在 6 次请求后显示:
0x7f2279cdsa42: key=test use=0 exp=278850 gpc0=6
它仍然发送到错误的后端(my_service
)
移动 stick-table
和 acls
我想出了一个解决方案。在 backend
sc0_get_gpc0
似乎可以从 stick-table
中获取正确的内容
工作代码如下所示:
# default block configs are set to http settings
frontend my_service
bind *:80
tcp-request inspect-delay 5s
http-request track-sc0 req.fhdr(X-My-Service)
stick-table type string len 350 size 10m expire 10m store gpc0
default_backend my_service
backend my_service
http-response sc-inc-gpc0 if { status gt 399 }
acl bad_request sc0_get_gpc0(my_service) gt 5
use-server bad_request if bad_reqest
balance roundrobin
server bad_request localhost:9090 weight 0
# normal app servers below this without weight 0
server .....
frontend bad_requests
bind localhost:9090
default_backend my_service_bad
backend my_service_bad
errorfile 503 /etc/haproxy/429.http
在后端执行此操作的关键是对仅提供错误代码和响应的服务器使用 weight 0
。如果 ACL 未激活,具有 weight 0
的服务器将不会用于流量。