Hướng một số tên miền phụ đến một phụ trợ duy nhất với haproxy


10

Tôi đang sử dụng haproxy để định tuyến trực tiếp cho một số ứng dụng đang chạy trên một máy chủ. Đối với một trong những tên miền đang sử dụng, có một vài chục tên miền phụ nên được hướng đến một trong một vài ứng dụng.

Hiện tại, tôi liệt kê tất cả các tên miền phụ đó trong một dòng separte. Cấu hình frontend của tôi trông như thế này:

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

Có cách nào để đạt được kết quả tương tự ở dạng ngắn gọn hơn không? Là danh sách như vậy có hiệu quả, hoặc sẽ tốt hơn để chuyển sang một regex tại một số điểm?


Heh, câu hỏi của bạn có chứa từ khóa regex, thực tế đó là câu trả lời của bạn, tôi tin thế. Cũng lưu ý rằng bạn có thể sử dụng hdr_begthay vì hdrđể bạn chỉ có thể liệt kê các tên miền phụ. Cuối cùng, có thể thu gọn gamma00-06ACL của bạn thành chỉ hai ACL, một cho sub1và một cho sub2, chỉ đơn giản bằng cách sử dụng tương tự acl <title>trong dòng ACL.
Felix Frank

Câu trả lời:


15

Để giữ hiệu suất ở mức tối đa (tránh regex mỗi lần nhấn) nhưng vẫn dọn sạch cấu hình, tôi sẽ sử dụng tệp bên ngoài cho ACL của bạn tại đây. Ví dụ: giả sử bạn có một tệp được gọi /etc/haproxy/sub1urls, chính xác là thế này:

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

Sau đó, trong cấu hình của bạn, ACL có thể chỉ đơn giản là:

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

Đặt các máy chủ khác trong một sub2urlstệp theo cách tương tự sẽ giảm cấu hình của bạn xuống:

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

Điều này giúp dễ dàng duy trì các tệp khác, vì chúng chỉ là danh sách các máy chủ lưu trữ. Nó mở ra danh sách những người có thể chỉnh sửa chúng và cũng ít gặp rủi ro hơn. Ví dụ: chúng tôi có những người chỉnh sửa các danh sách ACL như thế này trong con rối, những người không cần phải biết cú pháp cấu hình HAProxy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.