मूल अनुरोधित संसाधन के पूर्ण पते वाले कस्टम हेडर को कैसे जोड़ें


11

मेरे पास निम्न सेटअप है:

                 |-------|--- backend1:8080
example.com:80---|HAProxy|--- backend2:8080
                 |-------|--- backend3:8080

मैं मूल यूआरएल वाले कस्टम हेडर को जोड़ने के लिए HAProxy को कॉन्फ़िगर करना चाहूंगा। उदाहरण के लिए यदि उपयोगकर्ता अनुरोध करता है 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

लेकिन दुर्भाग्य से यह मूल यूआरएल के केवल मुख्य भाग को कैप्चर करता है जिसके परिणामस्वरूप निम्नलिखित हेडर हैं:

x-custom-header: /foo?bar=baz

तो मेरा सवाल यह है कि क्या हैडरॉक्सी 1.4 में Hostहेडर और HTTP अनुरोध की पहली पंक्ति को कस्टम हेडर में संयोजित करना संभव है


क्या आपने reqaddएक एसीएल के साथ संयोजन करने की कोशिश की है जो संदर्भ be_id(बैकएंड-आईडी) है? यह ठीक गतिशील नहीं है, लेकिन यह आपको करीब ला सकता है यदि बैकएंड की संख्या छोटी है ... reqirepएक वैकल्पिक एसएल का भी समर्थन करता है, तो आप संभवतः प्रत्येक बैक-एंड के लिए अलग-अलग रीजैक्स लिख सकते हैं, प्रत्येक सक्रिय तभी होगा जब एक एसएल चयनित बैकेंड से मेल खाता हो- आईडी।
माइकल - साइक्लबॉट

जवाबों:


18

संक्षिप्त उत्तर: नहीं, आप HAProxy 1.4 में ऐसा नहीं कर सकते ।


हालाँकि, 1.5+ पर इस प्रश्न को खोजने वालों के लिए:

HAProxy 1.5+ में आप %[variable]वाक्यविन्यास के माध्यम से चर को संदर्भित कर सकते हैं और आप केवल स्थैतिक स्ट्रिंग्स का उपयोग करने के लिए प्रतिबंधित नहीं हैं। आप देख सकते हैं कि HAProxy कॉन्फ़िगरेशन गाइड (विशेष रूप से परत 7 चर के लिए 7.3.6 ) की धारा 7.3 में कौन से चर मौजूद हैं ।

आपके मामले के लिए, आप urlइस तरह से कच्चे दिख रहे हैं :

http-request set-header X-Custom-Header %[url]

1
मेरे निष्कर्ष की पुष्टि करने के लिए धन्यवाद कि यह 1.4 में संभव नहीं है। मैंने स्विच किया है nginx
डारिन दिमित्रोव

% [url] हमेशा पूर्ण URL नहीं होता है, लेकिन ऐसा प्रतीत होता है कि सबसे अच्छा हाइप्रोक्स कर सकता है। haproxy 1.8 URL चर डॉक्स: cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.6-url
zie
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.