เหตุใดตำแหน่งการเปลี่ยนเส้นทางเว็บไซต์ S3 จึงไม่ตามด้วย CloudFront


18

ฉันมีเว็บไซต์โฮสต์บน Amazon S3 เป็นเว็บไซต์เก่ารุ่นใหม่ที่โฮสต์ใน WordPress

ฉันได้ตั้งค่าบางไฟล์ด้วยข้อมูลเมตา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 Permanentlyที่ดีสำหรับ SEO วิธีนี้ใช้งานได้ดีเมื่อเข้าถึง URL โดยตรงจากโดเมน S3

ฉันยังตั้งค่าการกระจาย CloudFront ตามที่ฝากข้อมูลของเว็บไซต์ และเมื่อฉันพยายามเข้าถึงผ่านการแจกจ่ายการเปลี่ยนเส้นทางไม่ทำงานเช่น:

http://xxxx123.cloudfront.net/solution ไม่เปลี่ยนเส้นทาง แต่ดาวน์โหลดไฟล์ว่างเปล่าแทน

ดังนั้นคำถามของฉันคือวิธีการเปลี่ยนเส้นทางผ่านการกระจาย CloudFront? หรือแนวคิดใด ๆ เกี่ยวกับวิธีจัดการการเปลี่ยนเส้นทางโดยไม่ทำให้ SEO เสื่อมลง?

ขอบคุณ

คำตอบ:


47

ฉันพบปัญหานี้เมื่อไม่นานมานี้และฉันพบวิธีแก้ไขที่ดูเหมือนจะใช้ได้

ฉันสร้างการแจกจ่าย Cloudfront โดยมีจุดกำเนิดที่กำหนดเองซึ่งชี้ไปที่ชื่อโฮสต์เว็บไซต์ S3 คงที่แทนที่จะเป็นชื่อโฮสต์ฝากข้อมูล ในกรณีของ OP แหล่งกำเนิดที่ต้องการจะเป็น

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

กดปุ่มการกระจาย Cloudfront โดยใช้ที่ฝากข้อมูลเนื่องจากต้นกำเนิดไม่ทำงานเนื่องจากที่ฝากข้อมูลไม่ได้ให้บริการการเปลี่ยนเส้นทาง มันให้บริการไฟล์และเก็บเมตาดาต้าเท่านั้น

หวังว่าจะช่วย


โปรดทราบว่า Cloudfront จะแคชการตอบสนองการเปลี่ยนเส้นทางแทนที่จะทำตาม ดังนั้นการดาวน์โหลดทรัพยากรที่คุณเปลี่ยนเส้นทางเพื่อเลี่ยงผ่าน Cloudfront
tfischbach

2
bmatsuo - ถ้าเราให้คะแนนตัวแทนพันล้านสำหรับเรื่องนี้เราก็จะทำ ขอบคุณมาก. คุณบันทึกวันจริง ๆ
นกปากซ่อม

สิ่งนี้ช่วยได้มาก! น่าจะกล่าวถึงสำหรับผู้ที่เพิ่งเริ่มใช้ S3: เพื่อสร้างที่เก็บข้อมูลแบบคงที่ให้ไปที่ถังข้อมูลของคุณและไปที่แท็บคุณสมบัติ คลิกการโฮสต์เว็บไซต์แบบคงที่ ที่จะให้ URL ที่ถูกต้องซึ่งจะช่วยให้คุณสามารถส่งต่อได้ :)
rick6

2

การวิเคราะห์

อ้างอิงถึงเอกสารการขอและพฤติกรรมการตอบสนองและรองรับรหัสสถานะ HTTP สำหรับต้นกำเนิดที่กำหนดเอง , Amazon CloudFrontไม่เป็นไปตามการเปลี่ยนเส้นทางที่น่าเสียดายที่:

[... ] หลังจากที่คุณกำหนดค่าการเปลี่ยนเส้นทางครั้งแรกที่ผู้ใช้ปลายทางส่งคำขอสำหรับวัตถุ CloudFront Front จะส่งคำขอไปยังจุดเริ่มต้นและแหล่งกำเนิดตอบกลับด้วยการเปลี่ยนเส้นทาง (ตัวอย่างเช่น 302 ย้ายชั่วคราว) CloudFront แคชเปลี่ยนเส้นทางและส่งคืนไปยังผู้ใช้ปลายทาง CloudFront ไม่ทำตามการเปลี่ยนเส้นทาง [เน้นเหมือง]

แน่นอนว่าคุณกำลังใช้Amazon S3แทนที่จะเป็นจุดเริ่มต้นที่กำหนดเองและส่วนที่เกี่ยวข้องไม่ได้มาจากการร้องขอและพฤติกรรมการตอบสนองสำหรับ Amazon S3 Originsแต่การเปลี่ยนเส้นทางของ Amazon S3 นั้นเพิ่งเพิ่มเข้ามาค่อนข้างพอสมควร (ดูAmazon S3 - การรองรับเว็บไซต์ เปลี่ยนเส้นทาง ) มันอาจจะยังคงมีอยู่

ดังนั้นฉันเดาว่าคุณไม่ได้รับไฟล์เปล่าที่มีรหัสสถานะ HTTP 200 ตกลงค่อนข้างสถานะ HTTP 301 ย้ายอย่างถาวรโดยไม่มีเนื้อหาเลย - คุณได้ตรวจสอบสิ่งนี้กับเบราว์เซอร์หรือในที่สุดด้วยเครื่องมือบรรทัดคำสั่งเท่านั้นเช่น เช่นม้วนหรือHTTPie ? เครื่องมือหลังมักจะต้องการพารามิเตอร์ที่ชัดเจนเพื่อติดตามการเปลี่ยนเส้นทางดังนั้นสิ่งนี้อาจไม่ถูกสังเกตเห็นได้ง่าย

โซลูชั่นที่มีศักยภาพ

หากการวิเคราะห์นั้นถูกต้องคุณจะต้องกำหนดค่าการเปลี่ยนเส้นทางไปยังเป้าหมาย CloudFront อย่างชัดเจนแทนดูการเปลี่ยนเส้นทางอีกครั้ง:

คุณสามารถกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเพื่อเปลี่ยนเส้นทางคำขอไปยังหนึ่งในสถานที่ต่อไปนี้:

  • URL ใหม่ของวัตถุบนเซิร์ฟเวอร์ต้นทาง เมื่อผู้ใช้ติดตามการเปลี่ยนเส้นทางไปยัง URL ใหม่ผู้ใช้ปลายทางจะข้าม CloudFront และไปยังจุดเริ่มต้น ด้วยเหตุนี้เราขอแนะนำให้คุณไม่เปลี่ยนเส้นทางคำขอไปยัง URL ใหม่ของวัตถุที่มา

  • URL CloudFront ใหม่สำหรับวัตถุ เมื่อผู้ใช้ส่งคำขอที่มี URL CloudFront ใหม่ CloudFront จะรับวัตถุจากตำแหน่งใหม่บนต้นทางของคุณแคชไว้ที่ตำแหน่งขอบและส่งคืนวัตถุไปยังผู้ใช้ปลายทาง คำขอที่ตามมาสำหรับวัตถุจะให้บริการโดยตำแหน่งขอบ วิธีนี้ช่วยหลีกเลี่ยงเวลาในการตอบสนองและโหลดที่เกี่ยวข้องกับผู้ดูที่ร้องขอวัตถุจากจุดเริ่มต้น อย่างไรก็ตามทุกคำขอใหม่สำหรับวัตถุจะต้องเสียค่าธรรมเนียมสำหรับคำขอสองคำขอไปยัง CloudFront


เมื่อฉันม้วน URL ที่จะต้องเปลี่ยนเส้นทางผ่านการกระจาย CloudFront ที่ฉันได้รับ: HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 ความเข้าใจของฉันคือการเปลี่ยนเส้นทางได้รับการจัดการโดย S3 และในกรณีนี้ไฟล์ถูกโฮสต์โดย CloudFront และไม่สนใจเกี่ยวกับส่วนหัวเปลี่ยนเส้นทางที่ตั้งค่าสำหรับ S3 As S3 เป็นเว็บเซิร์ฟเวอร์ของไฟล์ที่ฉันไม่สามารถแมปการเปลี่ยนเส้นทางอื่นที่ไม่ใช่เมตาดาต้า
ยานนิค Chaze
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.