haproxy 1.8 sc0_get_gpc0 เปิดใช้งาน acl จากจำนวนคำขอที่ไม่ถูกต้อง

ฉันใช้ HAproxy 1.8 และพยายามติดตามตัวนับทั่วไปด้วยแท่งตาราง แต่แต่ละครั้งที่ถูกเรียกโดย ACL มันจะไม่ส่งคืนค่าจริง

ความคาดหวังของฉันคือ; เมื่อตัวนับเกิน 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 .....

ฉันค้นหาสถิติแบบแท่งและแสดงสิ่งนี้หลังจากการร้องขอ 6 ครั้ง:

0x7f2279cdsa42: key=test use=0 exp=278850 gpc0=6

และยังส่งไปผิดแบ็กเอนด์ (my_service)


person nictrix    schedule 10.01.2018    source แหล่งที่มา


คำตอบ (1)


การย้าย stick-table และ acls ไปรอบๆ ฉันพบวิธีแก้ปัญหา ดูเหมือนว่า sc0_get_gpc0 สามารถรับเนื้อหาที่เหมาะสมจาก stick-table เมื่ออยู่ใน backend

นี่คือลักษณะของรหัสการทำงาน:

# 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 สำหรับเซิร์ฟเวอร์ที่ให้รหัสข้อผิดพลาดและการตอบกลับ เซิร์ฟเวอร์ที่มี weight 0 จะไม่ถูกใช้สำหรับการรับส่งข้อมูลหากไม่ได้เปิดใช้งาน ACL

person nictrix    schedule 11.01.2018