प्रत्यक्ष कई उपडोमेन haproxy के साथ एक एकल बैकएंड के लिए


10

मैं एक सर्वर पर चलने वाले कई एप्लिकेशन के लिए डायरेक्ट रूट के लिए हाइप्रोक्स का उपयोग कर रहा हूं। उपयोग में आने वाले किसी एक डोमेन के लिए कई दर्जनों उप-डोमेन हैं जिन्हें कुछ अनुप्रयोगों में से एक के लिए निर्देशित किया जाना चाहिए।

वर्तमान में, मैं उन सभी उप-डोमेन को एक सेपरेट लाइन में सूचीबद्ध करता हूं। मेरा दृश्य विन्यास इस तरह दिखता है:

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, जो वास्तव में आपका उत्तर है, मुझे विश्वास है। यह भी ध्यान दें कि आप इसके hdr_begबजाय उपयोग कर सकते हैं hdrताकि आप केवल उप-डोमेन की गणना कर सकें। अंत में, केवल एसीएल लाइन में समान का उपयोग करके अपने gamma00-06एसीएल को केवल दो एसीएल के लिए, एक के लिए sub1और एक के लिए ध्वस्त करना संभव होना चाहिए । sub2acl <title>
फेलिक्स फ्रैंक

जवाबों:


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

इससे उन अन्य फ़ाइलों को बनाए रखना बहुत आसान हो जाता है, क्योंकि वे केवल मेजबानों की सूची हैं। यह सूची को खोलता है कि कौन उन्हें संपादित कर सकता है और साथ ही कम जोखिम को उजागर कर सकता है। उदाहरण के लिए, हमारे पास इन एसीएल सूचियों को कठपुतली में इस तरह से संपादित करने वाले लोग हैं जिन्हें HAProxy config सिंटैक्स को बिल्कुल भी जानना नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.