Amazon Cloudfront với S3 Redirect


10

Tôi đang cố gắng làm điều gì đó tương đối đơn giản - Tôi muốn thiết lập một vài tên miền và tên miền phụ để chuyển hướng đến tên miền cốt lõi cho trang web của chúng tôi, nhưng tôi muốn đưa ra các chuyển hướng trên Cloudfront. Mọi thứ hoạt động ngoại trừ chuyển hướng đường dẫn gốc - điều đó cho tôi một tệp XML mô tả một phần nhóm S3.

Lý lịch

S3

S3 cho phép bạn thiết lập nhóm chuyển hướng tất cả , như:

S3 với Redirect tất cả các yêu cầu thiết lập

Kiểm tra điều này, điểm cuối web (Brass9-com.s3-website-us-west-1.amazonaws.com) thực hiện những gì cần thiết - nó chuyển hướng đến Brass9.com. Tốt

Đám mây

Cloudfront cho phép bạn trỏ vào nhóm S3, nhưng cách nó gợi ý bạn làm như vậy là sai - thay vì chỉ vào nhóm theo tên của nó, như Brass9-com.s3.amazonaws.com, bạn cần sử dụng Điểm cuối Web ở trên. Ngoài ra, bạn có thể để mọi thứ ở mặc định và có hành vi chuyển hướng tốt. Vì vậy, một đường dẫn như www.brass9.com/port portfolio chuyển hướng chính xác đến nơi cần thiết. Cũng tốt.

Vấn đề - chuyển hướng tên miền gốc

Một điều mà sau đó không hoạt động là chuyển hướng từ www.brass9.com đơn giản . Thay vì giúp bạn chuyển hướng, nó mang lại cho bạn kết quả kỳ lạ này:

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>

ĐỒNG Ý... . Vì vậy, điều này không hoàn toàn bất ngờ - vì không có Đối tượng gốc mặc định. Nhưng đối tượng Root mặc định nào tôi có thể chỉ định để ngăn chặn hành vi này? Tên của đối tượng chuyển hướng S3, nếu có, mà tôi cần trỏ đến là gì? Hoặc có một số cấu hình phù hợp khác, hay đây chỉ là một lỗi trong cách Cloudfront và S3 tương tác mà Amazon cần khắc phục?

Giải pháp không hoạt động đã biết: Đối tượng gốc mặc định

Có thể chỉ định Đối tượng gốc mặc định của index.html, nhưng nó không giúp được gì - nó chỉ thay đổi vấn đề. Thay vào đó, url của Cloudfront chuyển hướng đến /index.html trên trang web chính là 404 (chúng tôi không sử dụng tệp index.html, đây là trang web điều khiển khung phía máy chủ). Tôi có thể đặt index.html trên máy chủ, nhưng điều đó đánh bại mức tăng tốc độ nhỏ khi sử dụng Cloudfront ngay từ đầu.

Câu hỏi tương tự

Một câu hỏi yêu cầu một cái gì đó tương tự nhưng nhận lại một phản hồi 0 byte trống vì một số lý do thay vì những gì tôi đang thấy, một phản hồi XML. Nó không bao gồm một câu hỏi về vấn đề đó hoặc một giải pháp.

Những bài viết liên quan

Một bài viết đề xuất bạn chỉ phục vụ toàn bộ trang web trên cả miền trần và www . Vít này với bất kỳ dấu trang nào của người dùng, xếp hạng tìm kiếm của bạn, v.v. Bạn không nên làm điều này.

Một số thảo luận về việc lưu trữ một trang web tĩnh trên S3 và Cloudfront chứ không phải là sơ đồ chuyển hướng và do đó không liên quan.

Vì vậy, làm thế nào để tôi làm điều này đúng?

Ảnh chụp màn hình của Cấu hình Cloudfront - không có Đối tượng gốc mặc định, trỏ đến gốc S3. Bỏ qua InProTHER - Tôi vừa bật và tắt Đối tượng gốc mặc định để kiểm tra.

Phân phối Cloudfront không có Đối tượng gốc mặc định trỏ vào S3

Và cấu hình Origin cho bản phân phối đó:

Nguồn gốc - trỏ đến S3, mặc định


1
Bất kỳ yêu cầu nào đến điểm cuối của trang web được định cấu hình để chuyển hướng mọi thứ "nên" thực hiện chính xác điều đó, bao gồm cả root. Bạn có chính sách xô trên thùng chuyển hướng đó không? Nghe có vẻ như bạn có thể, nhưng bạn không nên. Cũng có vẻ hơi giống như bạn có thể đã thấy phản hồi được lưu trong bộ nhớ cache từ Cloudfront GET /từ trước khi bạn sửa cấu hình của mình để sử dụng điểm cuối web.
Michael - sqlbot

1
Trên thực tế, đó là phản hồi ListBucket được lưu trong bộ nhớ cache vẫn còn tồn tại trong S3, mặc dù tôi đã vô hiệu hóa và thay đổi cấu hình của CF nhiều lần. Chỉ mất một hoặc 4 giờ để xóa. @ Michael-sqlbot Nếu bạn đăng bình luận của bạn dưới dạng Trả lời tôi có thể đánh dấu nó là Chấp nhận.
Chris Moschini

Câu trả lời:


4

Nếu bạn gặp vấn đề này, trước tiên hãy kiểm tra khi bạn định cấu hình nguồn gốc s3 cho đám mây, tự động hoàn thành trả về tên miền cuối s3 REST.amazonaws.com trả về phản hồi ListBucketResult này.

Bạn phải viết thủ công tên miền trang web domain.s3-website-region.amazonaws.com

Quan trọng: Nếu bạn đã cấu hình sai mặt trước đám mây với điểm cuối REST, bạn phải vô hiệu hóa bộ đệm thông qua tính năng không hợp lệ hoặc nó sẽ tiếp tục trả về phản hồi REST


Lưu ý về việc vô hiệu hóa bộ đệm cuối cùng đã giúp tôi giải quyết vấn đề tôi đã theo đuổi trong vài ngày. Cảm ơn bạn!
Nate

Cảm ơn rất nhiều! Đối với người dùng Terraform, trong originkhối phân phối, sử dụng aws_s3_bucket.BUCKET.website_endpointtrong domain_name(không bucket_regional_name) và thêm custom_origin_configkhối.
dusan

Bạn là một cứu cánh! Chúng tôi đã vật lộn với vấn đề này cho ngày cuối cùng, tiếp tục lấy lại ListBucketResult XML mặc dù chúng tôi đã thay đổi cài đặt phân phối. Cuối cùng, sau khi xóa phân phối và tạo một phân phối mới trỏ đến domain.s3-website-region.amazonaws.com, chuyển hướng đã làm việc cho chúng tôi!
Dale Zak

2

Giải pháp: Thiết lập Redirect như đã nêu trong câu hỏi, sau đó đợi thời gian bộ đệm S3 và CloudFront. Chúng có thể là 4 giờ hoặc hơn, vì vậy bạn chỉ cần thiết lập tất cả sau đó chờ đợi và hy vọng điều tốt nhất.

(Đây là giải pháp của Michael từ Nhận xét, nhưng giờ đã nhiều năm và điều này thực sự xứng đáng được đánh dấu là Đã trả lời).


0

Viết dưới dạng câu trả lời vì tôi không thể nhận xét - từ tài liệu tại http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements dường như bạn có thể có một đối tượng gốc mặc định trống:

Nếu bạn không muốn chỉ định một đối tượng gốc mặc định khi bạn tạo phân phối, hãy bao gồm một phần tử DefaultRootObject trống.


Bạn có thể (mặc dù một số lib API đã cấm) - nhưng sử dụng Đối tượng gốc mặc định trống sẽ mang lại cho tôi phản hồi XML ListBucketResult kỳ cục mà bạn thấy trong Câu hỏi của mình.
Chris Moschini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.