क्या एक बार में रेफरर्स के झुंड को ब्लॉक करने का एक सुंदर तरीका है?


21

रेफरल स्पैम को रोकने के लिए, मेरे nginx.conf में इस तरह का एक सेक्शन है:

if ($http_referer ~* spamdomain1\.com) {
    return 444;
}
if ($http_referer ~* spamdomain2\.com) {
    return 444;
}
if ($http_referer ~* spamdomain3\.com) {
    return 444;
}

यदि उपयोगकर्ता के पास इन संदर्भों में से कोई एक सेट है, तो ये नियम कनेक्शन को बंद करने के लिए nginx को बताते हैं। क्या ऐसा करने का अधिक सुरुचिपूर्ण तरीका है? क्या मैं इन डोमेन की सूची को परिभाषित कर सकता हूं और फिर कुछ ऐसा कह सकता हूं, "यदि रेफरर इस सूची में है तो 444 वापस लौटाएं"?


नमूने से एक की तरह एक बड़ी फ़ाइल बनाएँ और जहाँ ज़रूरत हो उसमें फ़ाइल शामिल करें।
हरिवू jeपोलर

जवाबों:


31

मैं एक कोशिश करूँगा map:

map $http_referer $bad_referer {
    default                  0;
    "~spamdomain1.com"       1;
    "~spamdomain2.com"       1;
    "~spamdomain3.com"       1;
}

फिर इसे इस तरह उपयोग करें:

if ($bad_referer) {
    return 444;
}

1
चूंकि मानचित्र हैश टेबल का उपयोग करता है, इसलिए यह दृष्टिकोण व्यक्तिगत चेक की एक श्रृंखला से बेहतर प्रदर्शन करेगा। उन विकल्पों के लिए डॉक्स पढ़ें जिनका उपयोग किया जा सकता है, जैसे hostnamesऔर संभवत include: एक अलग फ़ाइल जहां वे सूचीबद्ध हैं, इसे बनाए रखना आसान बना सकता है।
ब्रायन

डॉक्स से संबंधित पढ़ने से mapमुझे यह देखने में दिलचस्पी थी कि क्या ओपीएक्स का उपयोग कुछ रेफ़रर्स से मिलान करने के लिए किया जा सकता है क्योंकि ओपी रेगेक्स को ~*ऑपरेटर का उपयोग करके मिलान कर रहा है, और वास्तव में जैसे नक्शा नियम निर्दिष्ट "~*spamdomain4.com" 1;करता है, वह चाल चलेगा। साफ!
हरिवू jeपोलर

आप सही हैं, और इसे वैसे भी उपयोग करने की आवश्यकता है।
माइकल हैम्पटन

hostnamesविकल्प का उपयोग करते हुए यह बस होगा.spamdomain4.com 1;
ब्रायन

4
@Brian संदर्भकर्ता फ़ील्ड एक पूर्ण URL है, न कि केवल एक होस्टनाम। तो वह काम नहीं करता है।
माइकल हैम्पटन

13

आप तार्किक ORका उपयोग एक मल्टी मैच स्टेटमेंट को शिल्प करने के लिए कर सकते हैं

if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com")  { 
  return 444;
}

प्रति टिप्पणी EDIT ; break;ब्लॉक से निकाल रहा है


2
ब्रेक निर्देश कभी नहीं पहुंचेगा क्योंकि रिटर्न वर्तमान अनुरोध के प्रसंस्करण को रोकता है।
जेवियर लुकास

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