जब कोई acls मैच नहीं तो HAProxy से 404 परोसें


15

मैं वर्तमान में 1.5dev-17 का उपयोग करके HAProxy को पुनः कॉन्फ़िगर कर रहा हूं। जब मैं एक विशेष अनुरोध के लिए उपयोग करने के लिए कोई बैकएंड नहीं है, तो मैं एक 404 त्रुटि वापस करना चाहता हूं।

हमारा वर्तमान कॉन्फ़िगरेशन हमारे django ऐप सर्वरों को रूट करने के लिए default_backend का उपयोग करता है, लेकिन जब बहुत सारे प्रोबिंग अनुरोध (जैसे कि पेन-टेस्ट) होते हैं, जो अन्य कॉन्फ़िगर किए गए बैकएंड में से किसी से भी मेल नहीं खाते, तो हमारे django सर्वर एक पड़ाव में पीसते हैं जैसे वे कोशिश करते हैं इन अमान्य अनुरोधों को पूरा करने के लिए, अंत में 404 वापस करना होगा।

मैं django बैकेंड्स को सौंपने के बजाय HAProxy से 404 की सेवा करना चाहता हूं। मैं वर्तमान में इसे हैक के साथ प्राप्त कर रहा हूं:

frontend www
    ...
    default_backend nomatch

backend nomatch
    errorfile 503 /var/www/http/404.http

और 404.http फ़ाइल के भीतर मैंने हेडर में 404 स्टेटस कोड सेट किया है। यह काम करता है, लेकिन बहुत गलत लगता है। क्या HAProxy के साथ इसे प्राप्त करने का एक बेहतर तरीका है? या मुझे एक नियमित बैकएंड का उपयोग करना चाहिए और बस 404 के साथ जवाब देने की अनुमति दें?


404.http फ़ाइल की सामग्री क्या है?
जेसन फ्लॉयड

3
@JasonFloyd HTTP/1.0 404 Not Foundकुछ अन्य हेडर के बाद, फिर एक रिक्त रेखा, फिर <html>सामग्री।
जोश स्मेटन

जवाबों:


4

यदि आप निम्नलिखित में से किसी भी प्रतिक्रिया कोड के साथ ठीक होंगे: 200, 400, 403, 405, 408, 429, 500, 502, 503, या 504।

तब आप कुछ ऐसा कर सकते थे:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

2

कुछ ऐसा ही चाहने के बाद भी यही बात मेरे सामने आई। यह गलत लगा लेकिन व्यवहार में यह बहुत अच्छी तरह से काम करता है और विशेष रूप से यूआरएल को ब्लैकलिस्ट करने की कोशिश करने से ज्यादा साफ है। बस एक टिप्पणी छोड़ना सुनिश्चित करें ताकि कोई यह सोचकर गलत न हो।

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