ฉันมีการตั้งค่าต่อไปนี้:
|-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
|-------|--- backend3:8080
ฉันต้องการกำหนดค่า HAProxy เพื่อเพิ่มส่วนหัวที่กำหนดเองที่มี URL ดั้งเดิม ตัวอย่างเช่นหากผู้ใช้ร้องขอhttp://example.com/foo?bar=baz
คือ:
GET /foo?bar=baz HTTP/1.1
Host: example.com:80
ฉันต้องการให้ HAProxy แปลคำขอนี้เป็นแบ็กเอนด์เช่นนั้น:
GET /foo?bar=baz HTTP/1.1
Host: backend1:8080
x-custom-header: http://example.com/foo?bar=baz
reqadd
ตัวเลือกเดียวที่ช่วยให้ฉันเพื่อเพิ่มส่วนหัวที่มีค่าคงที่ ฉันสามารถรับส่วนเส้นทางจากคำขอโดยใช้reqrep
:
reqrep ^([^\ ]*)\ ([^\ ]*)\ (HTTP\/1\.[10]) \0\r\nx-custom-header:\ \2
แต่น่าเสียดายที่สิ่งนี้จับเฉพาะส่วนของเส้นทางของ url ดั้งเดิมที่ทำให้เกิดส่วนหัวต่อไปนี้:
x-custom-header: /foo?bar=baz
ดังนั้นคำถามของฉันคือว่าเป็นไปได้ใน HAProxy 1.4เพื่อรวมทั้งHost
ส่วนหัวและบรรทัดแรกของคำขอ HTTP เป็นส่วนหัวที่กำหนดเอง
reqadd
กับ acl ที่อ้างอิงถึงbe_id
(backend-id) หรือไม่? มันไม่ได้มีความแม่นยำ แต่มันอาจช่วยให้คุณเข้าใกล้ได้มากขึ้นถ้าจำนวนแบ็กเอนด์มีขนาดเล็ก ...reqirep
นอกจากนี้ยังรองรับ acl เพิ่มเติมดังนั้นคุณสามารถเขียน regexes แยกกันสำหรับแบ็คเอนด์แต่ละอันแต่ละแอคทีฟเฉพาะถ้า acl รหัส