Mengapa lokasi pengalihan situs S3 tidak diikuti oleh CloudFront?

18

Saya memiliki situs web yang dihosting di Amazon S3. Ini adalah versi baru dari situs web lama yang dihosting di WordPress.

Saya telah menyiapkan beberapa file dengan metadata Website Redirect Locationuntuk menangani lokasi lama dan mengarahkannya ke halaman situs web baru.

Misalnya: Saya http://www.mysite.com/solutioningin mengarahkan ulang ke http://mysite.s3-website-us-east-1.amazonaws.com/product.htmlJadi saya membuat file kosong bernama solutiondi dalam ember saya dengan metadata yang benar:

Website Redirect Location= /product.html

Metadata redirect S3 setara dengan 301 Moved Permanentlyyang bagus untuk SEO. Ini berfungsi baik ketika mengakses URL langsung dari domain S3.

Saya juga telah mengatur distribusi CloudFront berdasarkan pada ember situs web. Dan ketika saya mencoba mengakses melalui distribusi saya, pengalihan tidak berfungsi, yaitu:

http://xxxx123.cloudfront.net/solution tidak mengarahkan tetapi mengunduh file kosong saja.

Jadi pertanyaan saya adalah bagaimana menjaga pengalihan melalui distribusi CloudFront? Atau ada ide tentang bagaimana menangani pengalihan tanpa memburuk SEO?

Terima kasih

Yannick Chaze
sumber

Jawaban:

47

Saya mengalami masalah ini baru-baru ini dan saya menemukan solusi yang tampaknya berhasil.

Saya membuat distribusi Cloudfront dengan asal kustom yang menunjuk ke nama host S3 situs web statis alih-alih nama host ember. Dalam kasus OP, asal yang diinginkan adalah.

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

Memukul distribusi Cloudfront hanya menggunakan ember karena asalnya tidak berfungsi karena ember tidak benar-benar melayani pengalihan. Ini hanya melayani file dan menyimpan metadata.

Semoga itu bisa membantu.

bmatsuo
sumber
Perhatikan bahwa Cloudfront menyimpan respons pengalihan alih-alih mengikutinya. Akibatnya, unduhan sumber daya yang Anda arahkan untuk mem-bypass Cloudfront.
tfischbach
2
bmatsuo - Jika kami bisa memberi Anda satu miliar poin rep untuk ini, kami akan melakukannya. Terima kasih banyak. Anda benar-benar menyelamatkan hari itu.
snipe
Ini sangat membantu! Layak disebutkan bagi siapa pun yang baru dengan S3: untuk membuat ember statis, buka ember Anda dan kunjungi tab Properties. Klik Hosting Situs Web Statis. Itu akan memberi Anda URL yang benar yang akan memungkinkan untuk penerusan :)
rick6
2

Analisis

Menurut Perilaku Permintaan dan Respons yang terdokumentasi , dan Kode Status HTTP yang Didukung untuk Asal Mula Kustom , Amazon CloudFront tidak mengikuti Pengalihan , sayangnya:

[...] Setelah Anda mengkonfigurasi arahan ulang, pertama kali pengguna akhir mengajukan permintaan untuk objek, CloudFront Front mengirimkan permintaan ke titik asal, dan titik asal merespons dengan arahan ulang (misalnya, 302 Dipindahkan Sementara). CloudFront menyimpan cache redirect dan mengembalikannya ke pengguna akhir. CloudFront tidak mengikuti arahan ulang. [penekanan milikku]

Tentu saja, Anda menggunakan Amazon S3 daripada asal kustom, dan bagian terkait terutama tidak ada dari Perilaku Permintaan dan Respons untuk Asal Amazon S3 , tetapi pengalihan Amazon S3 hanya ditambahkan baru-baru ini (lihat Amazon S3 - Dukungan untuk Situs Web Pengalihan ), mungkin saja masih ada yang hilang.

Karena itu saya berani menebak bahwa Anda tidak menerima file kosong dengan kode status HTTP 200 OK , melainkan status HTTP 301 Pindah secara permanen tanpa badan sama sekali - apakah Anda benar-benar memeriksa ini dengan browser atau akhirnya hanya dengan alat baris perintah seperti mis. CURL atau HTTPie ? Alat yang terakhir biasanya membutuhkan parameter eksplisit untuk mengikuti arahan ulang, jadi ini mungkin mudah diketahui.

Solusi Potensial

Jika analisis ternyata benar, Anda harus mengonfigurasi pengalihan untuk secara eksplisit menargetkan CloudFront, sebagai gantinya, lihat Pengalihan :

Anda dapat mengonfigurasi server web Anda untuk mengalihkan permintaan ke salah satu lokasi berikut:

  • URL objek baru di server asal. Ketika pengguna akhir mengikuti pengalihan ke URL baru, pengguna akhir mem-bypass CloudFront dan langsung menuju ke asalnya. Sebagai hasilnya, kami menyarankan Anda untuk tidak mengarahkan permintaan ke URL objek yang baru di tempat asal.

  • URL CloudFront baru untuk objek. Ketika pengguna akhir mengirimkan permintaan yang berisi URL CloudFront baru, CloudFront mendapatkan objek dari lokasi baru di tempat asal Anda, menyimpannya di lokasi tepi, dan mengembalikan objek ke pengguna akhir. Permintaan selanjutnya untuk objek akan dilayani oleh lokasi tepi. Ini menghindari latensi dan beban yang terkait dengan pemirsa yang meminta objek dari asal. Namun, setiap permintaan baru untuk objek akan dikenai biaya untuk dua permintaan ke CloudFront.

Steffen Opel
sumber
Ketika saya mengurung URL yang harus diarahkan melalui distribusi CloudFront saya dapatkan: HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 Pemahaman saya adalah bahwa pengalihan dikelola oleh S3 dan dalam hal ini file di-host oleh CloudFront dan tidak peduli tentang redirection header yang ditetapkan untuk S3 As S3 adalah server web file saya tidak bisa memetakan pengalihan selain dengan metadata.
Yannick Chaze