Nginx - कुछ उपयोगकर्ताओं के साथ विशेष पृष्ठ पर पुनर्निर्देशित कैसे करें


26

मैं काफी बड़ी छवि गैलरी चलाता हूं और 5 आगंतुक हैं जो वेबकॉपीरों का उपयोग करके पूरी साइट को हर दिन डाउनलोड करके बहुत अधिक मात्रा में ट्रैफ़िक बनाते हैं। उन आगंतुकों के पास स्थिर IP हैं जैसा कि लगता है। मैं क्या हासिल करना चाहूंगा कि वे 5 आईपी साइट पर जाते ही एक निश्चित पृष्ठ पर पुनर्निर्देशित हो जाते हैं (जो बताते हैं कि उनका व्यवहार समस्याग्रस्त क्यों है)। अन्य सभी आगंतुकों को साइट को सामान्य रूप से ब्राउज़ करने में सक्षम होना चाहिए।

सर्वर CentOS (5.8) और nginx (1.0.15) को वेबसर्वर के रूप में चला रहा है। क्या nginx.conf में एक प्रविष्टि द्वारा इसे प्राप्त करने का कोई तरीका है जिससे आप अवगत हैं?

आपके संकेत और समर्थन के लिए अग्रिम धन्यवाद!

तरह का संबंध है

जवाबों:


34

भू मॉड्यूल ग्राहक पतों का मिलान करने के लिए किया जाता है। आप इसका उपयोग करने के लिए एक चर को परिभाषित करने के लिए इसका उपयोग कर सकते हैं:

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
  if ($bad_user) {
    rewrite ^ http://www.example.com/noscrape.html;
  }
}

यह $ Remote_addr के खिलाफ रेगेक्स चलाने की तुलना में अधिक कुशल है, और इसे बनाए रखना आसान है।


बहुत बहुत धन्यवाद - यह जियो का उपयोग करके बहुत अच्छा काम करता है! बस एक चीज: यह केवल domain.com के अनुरोधों को रीडायरेक्ट करता है और domain.com/file.ext या domain.com/subdirectory/file.ext जैसे प्रत्यक्ष अनुरोधों को नहीं। मुझे यह कैसे हासिल होगा? दुर्भाग्य से, मैं काफी RegEx Noob हूं। :(
एलेक्स

अगर तुम डाल दिया तो कहाँ? क्या आप संपूर्ण सर्वर ब्लॉक प्रदान कर सकते हैं? कुछ और विचार के बाद, अगर सीधे सर्वर में डाल दिया जाए तो यह सबसे अच्छा विचार नहीं है, क्योंकि इसका मूल्यांकन /noscrape.html के अनुरोध के लिए भी किया जाएगा
kolbyjack

20

HttpAccessModule का उपयोग करके आप इसे जल्दी बना लेंगे।

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}

बहुत बहुत धन्यवाद, खालिद! क्या उस निर्देश में कई आईपी को शामिल करने का एक तरीका है?
एलेक्स

क्षमा करें, मैं थोड़ा भ्रमित हूँ (यहाँ नया) - क्या मैट ने प्रश्न का उत्तर दिया या खालिद ने? हालाँकि, आप दोनों को धन्यवाद! ;)
एलेक्स

1
यह वास्तव में रिवाइराइट मॉड्यूल का उपयोग करता है । आप इस तरह एक नियमित अभिव्यक्ति मैच का उपयोग कर सकते हैं if ($remote_addr ~ "^(1.2.3.4|4.3.2.1)$"):।
मोर्गन

मेरा nginx -Vकहना है कि ऐसा कोई मॉड्यूल नहीं है, लेकिन यह काम करता है। शायद यह अभी के लिए बनाया गया है।
user3132194

1

यदि आप एक ही डोमेन में एक अलग पृष्ठ पर पुनर्निर्देशित करते हैं, और यदि आपने उपरोक्त उदाहरणों का पालन किया है तो यह प्रत्यक्ष लूप का कारण होगा। तो अपने nginx कॉन्फ़िगरेशन फ़ाइल में, निम्नलिखित के रूप में उपयोग करें (मुझे लगता है कि आप वर्डप्रेस का उपयोग करते हैं क्योंकि यह व्यापक रूप से उपयोग किया जाता है)

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
 location /
 {
  if ($bad_user) {
    rewrite ^ http://www.example.com/warning-page/ break;
  }

try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
 }

location /warning-page/
{
try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
}

}

अब यदि काली सूची में डाले गए किसी व्यक्ति ने चेतावनी-पृष्ठ को छोड़कर किसी भी पृष्ठ का दौरा किया, जो कि साइट में अनलिस्टेड है, तो उन्हें चेतावनी पृष्ठ पर पुनः निर्देशित किया जाएगा। चूंकि पुनर्लेखन स्थान / ब्लॉक में है, इसलिए यह पुनर्निर्देशित लूप का कारण नहीं होगा। हालांकि, अगर यह सर्वर ब्लॉक के अंदर है, तो यह एक रीडायरेक्ट लूप का कारण होगा।

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