404 त्रुटि पर HAProxy URL फिर से लिखना


9

जब पहली फ़ाइल गुम हो रही है तो HAProxy को एक अलग बैक-एंड में कैसे फिर से लिखना है? मुझे क्या चाहिए errorlocलेकिन रीडायरेक्ट के बजाय फिर से लिखना है, इसलिए क्लाइंट को रीडायरेक्ट के बारे में पता नहीं है।

हमने NginX को ध्यान में रखते हुए एक एप्लिकेशन विकसित किया है, जो स्टैटिक फ़ाइलों के लिए रिवर्स प्रॉक्सी और वेब सर्वर दोनों को संतुलित कर रहा था। आवेदन ओपा ढांचे पर आधारित है जिसमें कुकीज़ के आधार पर चिपचिपा सत्रों की आवश्यकता होती है - जो नगिनएक्स और हैप्रोक्सी दोनों द्वारा समर्थित है। हमारे पास जिस एप्लिकेशन सुविधा की समस्या है वह डायनामिक कंटेंट जेनरेशन है। यह मांग पर चित्र बनाता है, लेकिन पीढ़ी के बाद इसे डिस्क पर सहेजा जाता है और इसे नियतात्मक पथ के साथ सांख्यिकीय रूप से एक्सेस किया जा सकता है।

समस्या को आसानी से NginX के साथ हल किया गया था - यह स्थानीय फ़ाइल को पढ़ने और लोड संतुलित बैक-एंड का उपयोग करने का केवल तभी प्रयास करता है जब फ़ाइल गायब हो (अभी तक उत्पन्न नहीं हुई है):

server {
  server_name wkaliszu.pl;
  location /thumb {
    root /path_on_disk/to_cached_content;
    expires 7d;
    # try to access already generated content
    try_files $uri @wkaliszu;
  }
  location / {
    # reverse proxy to the application
    [...]
  }
  location @wkaliszu {
    # reverse proxy to the application
    [...]
  }
}

सर्वर माइग्रेट किया गया था और अब लोड संतुलन के लिए HAPproxy का उपयोग करता है, जो वेब सर्वर नहीं है और इस सुविधा का समर्थन नहीं करता है। अब डायनेमिक सॉफ्टवेयर जेनरेशन का प्रदर्शन किया जाता है, जब हर बार क्लाइंट संसाधन तक पहुंचने की कोशिश करता है, जो बहुत धीमा और संसाधनों को बर्बाद करता है। यह ठीक होगा अगर यह अगले बैक-एंड का उपयोग कर सकता है यदि पहला (स्थिर फ़ाइलों के लिए सरल कैशिंग सर्वर) त्रुटि 404 के साथ विफल हो गया, लेकिन मुझे इसे सरल तरीके से करने का कोई तरीका नहीं मिल सकता है। /thumbNginX को पुनर्निर्देशित करना, जो स्थिर फ़ाइल को पढ़ने की कोशिश करता है और फिर से नए HTTP हेडर के साथ HAproxy को फिर से लिखता है, केवल मेरे दिमाग में आता है, लेकिन मैं कुछ बेहतर खोजना चाहता हूं।


एप्लिकेशन सर्वर का बैकएंड क्या उपयोग करता है?
जेफैट्रैकैड

जवाबों:


1

HAProxy के बैकएंड या तो ऊपर या नीचे होते हैं (या ऊपर / नीचे होने के उनके रास्ते पर)।

बैकएंड के स्वास्थ्य की जांच करने के विभिन्न तरीके हैं, लेकिन मैं किसी भी ऐसे व्यक्ति के बारे में नहीं जानता जो प्रति-अनुरोध आधारित ट्रैकिंग प्रदान करता है। एक बार एक अनुरोध विफल हो जाता है, उस बैकएंड को नीचे के रूप में चिह्नित किया जाएगा या असफल हो जाएगा (नीचे माना जा रहा है)।

यह आपके Nginx सेटअप की तुलना में बहुत भिन्न तर्क है जो प्रति-अनुरोध के आधार पर अनुरोधों को रूट कर रहा था।

मुझे यहां कुछ विकल्प दिखाई देते हैं:

  • कैशिंग प्रॉक्सी के रूप में नेग्नेक्स
  • Static Content के लिए Apps Servers का उपयोग करें
  • CDN का उपयोग करें

कैशिंग प्रॉक्सी

HAProxy में, आप विशिष्ट बैकेंड में स्थिर सामग्री अनुरोधों को रूट करने के लिए ACL का उपयोग करेंगे। वे बैकएंड नोड्स कैशिंग प्रॉक्सी के साथ nginx चलाएंगे। यदि nginx में फ़ाइल कैश की गई थी, तो वह इसे सर्व करेगी। यदि नहीं, तो यह आपके बैकएंड को कॉल करेगा।

स्टेटिक सामग्री के लिए ऐप सर्वर का उपयोग करें

यदि आपके ऐप सर्वर स्थिर सामग्री परोसने में कुशल हैं, तो आपको हाइप्रोक्स में अनुरोध को विभाजित करने की आवश्यकता नहीं हो सकती है। बस अपने आवेदन बैकेंड में सभी अनुरोध भेजें। यदि उपलब्ध है और यदि बैकएंड के लिए अनुरोध नहीं भेजते हैं तो स्थिर सामग्री परोसने के लिए उनमें तर्क बनाएँ।

सीडीएन विकल्प

यदि आप स्थैतिक सामग्री के लिए एक समर्पित डोमेन का उपयोग कर सकते हैं, तो आप CDN का उपयोग करने में सक्षम हो सकते हैं। CDN पर, आप स्रोत URL को केवल अपने एप्लिकेशन नोड्स में इंगित करते हैं। फिर आप CDN स्तर पर कैशिंग को नियंत्रित कर सकते हैं। यह ऊपर Nginx कैशिंग के समान है सिवाय इसके कि CDN प्रदाता आपके लिए इसे संभाल रहा है।

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