2012-07-17 18 views
9

क्या कोई जानता है कि 'facebookexternalhit' बॉट को अपने यातायात को फैलाने के लिए कैसे बताना है?facebookexternalhit bot से अत्यधिक ट्रैफ़िक

हमारी वेबसाइट लगभग 45-60 मिनट हर साल स्पाइक्स के साथ हथौड़ा हो जाती है। फेसबुक netblocks से 20 से 30 विभिन्न आईपी पते से प्रति सेकंड 400 अनुरोध। स्पाइक्स के बीच यातायात गायब नहीं होता है, लेकिन लोड स्वीकार्य है। हम बॉट को अवरुद्ध नहीं करना चाहते हैं, लेकिन ये स्पाइक्स खतरनाक हैं। हम बॉट को समय के साथ समान रूप से लोड करने के लिए देखना पसंद करेंगे। और इसे Googlebot & मित्रों की तरह व्यवहार करें।

मैंने संबंधित बग रिपोर्ट (First Bug, Second Bug और थर्ड बग (# 385275384858817)) देखी है, लेकिन लोड को प्रबंधित करने के लिए कोई सुझाव नहीं मिला।

+0

हमारी साइट पर फेसबुक बॉट ने 21 अगस्त 09:00 सीईटी के बाद से अपना भार फैलाना शुरू कर दिया है। कोई और फट लोड नहीं! –

+0

बॉट 7 अगस्त को अपने दुर्व्यवहार जारी रखा :( –

+0

संबंधित, देखें: http://stackoverflow.com/questions/7716531/facebook-and-crawl-delay-in-robots-txt – artlung

उत्तर

9

अन्य उत्तरों के अनुसार, फेसबुक का अर्ध-आधिकारिक शब्द "इसे चूसना" है। यह मुझे cannot follow Crawl-delay (हाँ, मुझे पता है कि यह "क्रॉलर" नहीं है, हालांकि कुछ सेकंड में 100 पेज प्राप्त करना एक क्रॉल है, जिसे आप इसे कॉल करना चाहते हैं)।

चूंकि कोई अपने हबिस से अपील नहीं कर सकता है, और उनके आईपी ब्लॉक को ड्रॉइंग करना बहुत ही कठिन है, यहां मेरा तकनीकी समाधान है।

PHP में, प्रत्येक अनुरोध के लिए जितनी जल्दी हो सके निम्न कोड निष्पादित करें।

define('FACEBOOK_REQUEST_THROTTLE', 2.0); // Number of seconds permitted between each hit from facebookexternalhit 

if(!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT'])) { 
    $fbTmpFile = sys_get_temp_dir().'/facebookexternalhit.txt'; 
    if($fh = fopen($fbTmpFile, 'c+')) { 
     $lastTime = fread($fh, 100); 
     $microTime = microtime(TRUE); 
     // check current microtime with microtime of last access 
     if($microTime - $lastTime < FACEBOOK_REQUEST_THROTTLE) { 
      // bail if requests are coming too quickly with http 503 Service Unavailable 
      header($_SERVER["SERVER_PROTOCOL"].' 503'); 
      die; 
     } else { 
      // write out the microsecond time of last access 
      rewind($fh); 
      fwrite($fh, $microTime); 
     } 
     fclose($fh); 
    } else { 
     header($_SERVER["SERVER_PROTOCOL"].' 503'); 
     die; 
    } 
} 

आप की तरह कुछ के साथ एक कमांड लाइन से इस परीक्षण कर सकते हैं:

$ rm index.html*; wget -U "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" http://www.foobar.com/; less index.html 

सुधार सुझावों का स्वागत है ... मैं एक बहुत बड़ा विस्फोट के साथ उनके कुछ संगामिति मुद्दों हो सकता है लगता है कि होगा।

+0

अच्छा काम @ हैक – artlung

+2

धन्यवाद @ जो मैं एक हफ्ते के लिए सीधे रात में 2-3 बार पगड़ रहा था। आवश्यकता आविष्कार की मां है .-) – Stickley

+0

@ स्टिकले भी 4 साल बाद आपने हमारे जीवन को बचाया। हमारे पास एक और सीएमएस से स्थानांतरित साइट के साथ समान समस्याएं थीं और हमने कुछ पुराने यूआरएल से नए रीडायरेक्ट किए थे, जिससे फेसबुक को बेर्सक जाने और हजारों हिट प्रति सेकंड के साथ हमारे सर्वर को हथौड़ा बनाने का कारण बन गया। हिट को न्यूनतम रखने के लिए हमने आपके थ्रॉटलर को यादृच्छिक रूप में भी शामिल किया है ... – Shardon

2

हमें हमारी वेबसाइट/सर्वर पर एक ही समस्या थी। समस्या og:url metatag थी। इसे हटाने के बाद, अधिकांश facebookexternalhit कॉल के लिए समस्या हल हो गई थी।

एक और समस्या यह थी कि कुछ चित्र जिन्हें हमने निर्दिष्ट किया है: छवि टैग, मौजूद नहीं थे। तो facebookexternhit स्क्रैपर यूआरएल के प्रत्येक कॉल के लिए यूआरएल पर हर छवि को बुलाया।

+0

आपको बहुत बहुत धन्यवाद! मैं bonkers जा रहा था। – Christina

4

मुझे पता है कि यह एक पुराना है, लेकिन अनुत्तरित, प्रश्न है। मुझे आशा है कि यह उत्तर किसी की मदद करेगा।

वहाँ एक ओपन ग्राफ़ टैग आप नीचे फेसबुक क्रॉलर द्वारा किए गए अनुरोधों को धीमा करने की अनुमति देता है कि og:ttl नामित है: (reference)

क्रॉलर दर सीमित आप कितनी देर तक बदलने के लिए पृष्ठों और वस्तुओं लेबल कर सकते हैं फेसबुक का क्रॉलर उन्हें नई सामग्री के लिए जांचने के लिए इंतजार करेगा। यदि हमारे क्रॉलर बहुत आक्रामक हैं तो क्रॉलर पहुंच को सीमित करने के लिए og:ttl ऑब्जेक्ट प्रॉपर्टी का उपयोग करें।

og:ttl के लिए object properties जाँच हो रही है कहा गया है कि डिफ़ॉल्ट टीटीएल प्रत्येक प्रामाणिक URL साझा के लिए 30 दिन है। इसलिए इस टीटीएल मेटा टैग को सेट करने से केवल अनुरोध धीमा हो जाएंगे यदि आपके पास समय के साथ साझा वस्तुओं की बहुत बड़ी मात्रा है।

लेकिन, यदि आप वास्तविक लाइव ट्रैफ़िक (उपयोगकर्ता एक ही समय में अपनी कई कहानियों को साझा करते हुए) के कारण फेसबुक के क्रॉलर द्वारा पहुंचे जा रहे हैं, तो यह निश्चित रूप से काम नहीं करेगा।

आपके लिए बहुत सारे क्रॉलर अनुरोधों की एक और संभावना है, यह है कि आपकी कहानियां सही कैननिकल यूआरएल (og:url) टैग का उपयोग करके साझा नहीं की जा रही हैं। मान लीजिए, आपके उपयोगकर्ता कई अलग-अलग स्रोतों से वास्तव में आपकी साइट पर कुछ आलेख तक पहुंच सकते हैं (वास्तव में एक ही आलेख को देखने और साझा करने में सक्षम होने पर, लेकिन वे जो यूआरएल देखते हैं वह अलग है), यदि आप सभी के लिए og:url टैग सेट नहीं करते हैं उनमें से, फेसबुक सोचेंगे कि यह एक अलग लेख है, इसलिए केवल एक और केवल कैननिकल यूआरएल के बजाय उन सभी को क्रॉलर अनुरोधों के साथ उत्पन्न करना। अधिक जानकारी here

उम्मीद है कि यह मदद करता है।