นำโดเมนย่อยหลายโดเมนไปที่แบ็กเอนด์เดียวโดยใช้ haproxy


10

ฉันใช้ haproxy เพื่อกำหนดเส้นทางสำหรับแอปพลิเคชั่นหลายตัวที่ทำงานบนเซิร์ฟเวอร์เดียว สำหรับโดเมนที่ใช้งานมีโดเมนย่อยหลายสิบโดเมนที่ควรถูกนำไปยังแอปพลิเคชันหนึ่งในไม่กี่แห่ง

ขณะนี้ฉันแสดงรายการโดเมนย่อยเหล่านั้นทั้งหมดในบรรทัด separte การกำหนดค่าส่วนหน้าของฉันมีลักษณะเช่นนี้:

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl gamma00   hdr(host) -i apple.gamma.com
    acl gamma01   hdr(host) -i banana.gamma.com
    acl gamma02   hdr(host) -i cherry.gamma.com
    acl gamma03   hdr(host) -i durian.gamma.com
    acl gamma04   hdr(host) -i elderberry.gamma.com
    acl gamma05   hdr(host) -i fig.gamma.com
    acl gamma06   hdr(host) -i grapefruit.gamma.com
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if gamma00
    use_backend sub1 if gamma01
    use_backend sub1 if gamma02
    use_backend sub2 if gamma03
    use_backend sub2 if gamma04
    use_backend sub2 if gamma05
    use_backend sub2 if gamma06
    use_backend g if gamma

    default_backend default

มีวิธีการบรรลุผลลัพธ์ที่คล้ายกันในรูปแบบที่กระชับมากขึ้นหรือไม่? รายชื่อดังกล่าวมีประสิทธิภาพหรือควรเปลี่ยนเป็น regex ดีกว่าไหม


คำถามของคุณมีคำหลักregexซึ่งจริงๆแล้วฉันเชื่อว่าคำตอบของคุณ นอกจากนี้โปรดทราบว่าคุณสามารถใช้hdr_begแทนhdrเพื่อให้คุณสามารถระบุโดเมนย่อยเท่านั้น ในที่สุดมันก็เป็นไปได้ที่จะยุบgamma00-06ACL ของคุณเป็นสอง ACLs หนึ่งต่อsub1หนึ่งสำหรับsub2โดยใช้เหมือนกันacl <title>ในบรรทัด ACL
เฟลิกซ์แฟรงค์

คำตอบ:


15

เพื่อให้ได้ประสิทธิภาพสูงสุด (หลีกเลี่ยงการ regex ทุกครั้ง) แต่ยังคงล้างการกำหนดค่าฉันจะใช้ไฟล์ภายนอกสำหรับ ACL ของคุณที่นี่ ตัวอย่างเช่นสมมติว่าคุณมีไฟล์ชื่อ/etc/haproxy/sub1urlsซึ่งก็คือ:

apple.gamma.com
banana.gamma.com
cherry.gamma.com

จากนั้นในการกำหนดค่าของคุณ ACL อาจเป็น:

acl is_sub1 hdr(host) -i -f /etc/haproxy/sub1urls

การใส่โฮสต์อื่น ๆ ในsub2urlsไฟล์ด้วยวิธีเดียวกันจะช่วยลดการกำหนดค่าลงไปที่:

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl is_sub1   hdr(host) -i -f /etc/haproxy/sub1urls
    acl is_sub2   hdr(host) -i -f /etc/haproxy/sub2urls
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if is_sub1
    use_backend sub2 if is_sub2
    use_backend g if gamma

    default_backend default

สิ่งนี้ทำให้ง่ายต่อการดูแลรักษาไฟล์อื่น ๆ เนื่องจากเป็นเพียงรายการโฮสต์ มันเปิดรายการของผู้ที่สามารถแก้ไขได้และเสี่ยงน้อยเช่นกัน ตัวอย่างเช่นเรามีคนที่แก้ไขรายการ ACL เช่นนี้ในหุ่นเชิดที่ไม่ต้องรู้ไวยากรณ์การกำหนดค่า HAProxy เลย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.