CloudFront द्वारा S3 वेबसाइट पुनर्निर्देशित स्थान का पालन क्यों नहीं किया जाता है?


18

मेरे पास Amazon S3 पर होस्ट की गई वेबसाइट है। यह वर्डप्रेस पर होस्ट की गई एक पुरानी वेबसाइट का नया संस्करण है।

मैंने Website Redirect Locationपुराने स्थान को संभालने के लिए मेटाडेटा के साथ कुछ फाइलें स्थापित की हैं और उन्हें नए वेबसाइट पृष्ठों पर पुनर्निर्देशित किया है।

उदाहरण के लिए: मेरे पास था http://www.mysite.com/solutionकि मैं अनुप्रेषित करना चाहता हूं http://mysite.s3-website-us-east-1.amazonaws.com/product.htmlइसलिए मैंने solutionअपनी मेटाडेटा के साथ एक बाल्टी नाम की खाली फ़ाइल बनाई है :

Website Redirect Location= /product.html

S3 पुनर्निर्देशित मेटाडेटा 301 Moved PermanentlySEO के लिए बढ़िया है। S3 डोमेन से सीधे URL एक्सेस करने पर यह बहुत अच्छा काम करता है।

मैंने वेबसाइट बकेट पर आधारित CloudFront वितरण भी स्थापित किया है। और जब मैं अपने वितरण के माध्यम से एक्सेस करने की कोशिश करता हूं, तो रीडायरेक्ट काम नहीं करता है, अर्थात:

http://xxxx123.cloudfront.net/solution रीडायरेक्ट नहीं करता है, बल्कि खाली फ़ाइल डाउनलोड करता है।

तो मेरा सवाल है कि CloudFront वितरण के माध्यम से पुनर्निर्देशन कैसे रखा जाए? या किसी भी विचार कैसे एसईओ के बिना पुनर्निर्देशन को संभालने के लिए?

धन्यवाद

जवाबों:


47

मैं हाल ही में इस समस्या में भाग गया और मुझे एक समाधान मिला जो काम करने के लिए लग रहा था।

मैंने बकेट होस्टनाम के बजाय S3 स्टैटिक वेबसाइट होस्टनाम की ओर इशारा करते हुए कस्टम मूल के साथ क्लाउडफ्रंट वितरण बनाया। ओपी के मामले में, वांछित मूल होगा।

mysite.s3-website-us-east-1.amazonaws.com

क्लाउडफ्रंट वितरण को केवल बाल्टी का उपयोग करके हिट करना क्योंकि मूल काम नहीं करता है क्योंकि बाल्टी वास्तव में पुनर्निर्देशित नहीं करती है। यह केवल मेटाडेटा फ़ाइलें और स्टोर कार्य करता है।

उम्मीद है की वो मदद करदे।


ध्यान दें कि क्लाउडफ्रंट इसका अनुसरण करने के बजाय पुनर्निर्देशित प्रतिक्रिया को कैश करता है। नतीजतन आप उन संसाधनों को डाउनलोड करते हैं जो आप क्लाउडफ्रंट को बायपास करने के लिए पुनर्निर्देशित करते हैं।
tfischbach

2
bmatsuo - अगर हम आपको इसके लिए एक बिलियन रेप पॉइंट दे सके, तो हम करेंगे। बहुत बहुत धन्यवाद। आपने सचमुच दिन बचा लिया।
ठीक गोली चलाना

इससे काफी मदद मिली! S3 के लिए किसी के लिए नया उल्लेख करना: एक स्थिर बाल्टी बनाने के लिए, अपनी बाल्टी पर जाएं और गुण टैब पर जाएं। स्टेटिक वेबसाइट होस्टिंग पर क्लिक करें। यह आपको सही URL देगा जो आगे भेजने की अनुमति देगा :)
rick6

2

विश्लेषण

प्रलेखित अनुरोध और प्रतिक्रिया व्यवहार के अनुसार, और कस्टम मूल के लिए समर्थित HTTP स्थिति कोड , अमेज़न CloudFront दुर्भाग्य से अनुप्रेषित का पालन नहीं करता है :

[...] जब आप रीडायरेक्ट कॉन्फ़िगर करते हैं, तो पहली बार एक अंतिम उपयोगकर्ता ऑब्जेक्ट के लिए एक अनुरोध सबमिट करता है, CloudFront Front मूल को अनुरोध भेजता है, और मूल एक रीडायरेक्ट के साथ प्रतिक्रिया करता है (उदाहरण के लिए, 302 अस्थायी रूप से स्थानांतरित)। CloudFront रीडायरेक्ट को कैश करता है और इसे अंतिम उपयोगकर्ता को लौटाता है। CloudFront रीडायरेक्ट का पालन नहीं करता है। [जोर मेरा]

बेशक, आप कस्टम मूल के बजाय अमेज़ॅन एस 3 का उपयोग कर रहे हैं , और अमेज़ॅन एस 3 ओरिजिन के लिए अनुरोध और प्रतिक्रिया व्यवहार से संबंधित एक खंड विशेष रूप से अनुपस्थित है , लेकिन दिए गए अमेज़ॅन एस 3 पुनर्निर्देश केवल हाल ही में जोड़े गए हैं ( अमेज़ॅन एस 3 देखें - वेबसाइट के लिए समर्थन पुनर्निर्देश ), यह अभी भी वहाँ गायब हो सकता है।

तदनुसार मैं यह अनुमान लगाता हूं कि आपको HTTP स्टेटस कोड 200 ओके के साथ एक खाली फाइल नहीं मिल रही है , बल्कि HTTP स्टेटस 301 बिना किसी बॉडी के साथ परमानेंटली मूव किया गया है - क्या आपने वास्तव में इसे ब्राउजर के साथ या अंत में केवल कमांड लाइन टूल की तरह चेक किया है जैसे cURL या HTTPie ? बाद के उपकरणों को आमतौर पर पुनर्निर्देशन का पालन करने के लिए एक स्पष्ट पैरामीटर की आवश्यकता होती है, इसलिए यह आसानी से किसी का ध्यान नहीं जा सकता है।

संभावित समाधान

यदि विश्लेषण सही निकला, तो आपको इसके बजाय स्पष्ट रूप से CloudFront को लक्षित करने के लिए रीडायरेक्ट को कॉन्फ़िगर करना होगा, फिर से रीडायरेक्ट देखें :

आप अपने वेब सर्वर को निम्न स्थानों में से एक अनुरोध पर पुनर्निर्देशित कर सकते हैं:

  • मूल सर्वर पर ऑब्जेक्ट का नया URL। जब अंतिम उपयोगकर्ता नए URL पर पुनर्निर्देशित करता है, तो अंतिम उपयोगकर्ता CloudFront को बायपास करता है और सीधे मूल पर जाता है। नतीजतन, हम अनुशंसा करते हैं कि आप मूल पर ऑब्जेक्ट के नए URL पर अनुरोधों को पुनर्निर्देशित न करें।

  • ऑब्जेक्ट के लिए नया CloudFront URL। जब अंतिम उपयोगकर्ता नए CloudFront URL वाले अनुरोध को सबमिट करता है, तो CloudFront आपके मूल पर नए स्थान से ऑब्जेक्ट प्राप्त करता है, इसे किनारे स्थान पर कैश करता है, और ऑब्जेक्ट को अंतिम उपयोगकर्ता को लौटाता है। वस्तु के लिए बाद के अनुरोधों को किनारे के स्थान द्वारा परोसा जाएगा। यह दर्शकों से जुड़े विलंबता और भार को मूल से वस्तु का अनुरोध करने से रोकता है। हालाँकि, ऑब्जेक्ट के लिए प्रत्येक नया अनुरोध CloudFront के लिए दो अनुरोधों के लिए शुल्क वसूल करेगा।


जब मुझे वह URL प्राप्त होता है जिसे मुझे CloudFront वितरण के माध्यम से पुनर्निर्देशित किया जाना है: मुझे HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 समझ में आया कि पुनर्निर्देशन S3 द्वारा प्रबंधित किया जाता है और इस मामले में फ़ाइल CloudFront द्वारा होस्ट की जाती है और यह S3 As S3 के लिए सेट पुनर्निर्देशक हेडर के बारे में परवाह नहीं करता है। फ़ाइल का वेब सर्वर मैं मेटाडेटा के अलावा अन्य रीडायरेक्ट को मैप नहीं कर सकता।
यानिक चेज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.