Tại sao vị trí chuyển hướng trang web S3 không được CloudFront theo dõi?


18

Tôi có một trang web được lưu trữ trên Amazon S3. Đây là phiên bản mới của một trang web cũ được lưu trữ trên WordPress.

Tôi đã thiết lập một số tệp có siêu dữ liệu Website Redirect Locationđể xử lý vị trí cũ và chuyển hướng chúng đến các trang web mới.

Ví dụ: Tôi có http://www.mysite.com/solutionrằng tôi muốn chuyển hướng đến http://mysite.s3-website-us-east-1.amazonaws.com/product.htmlVì vậy, tôi đã tạo một tệp trống có tên solutiontrong nhóm của mình với siêu dữ liệu chính xác:

Website Redirect Location= = /product.html

Siêu dữ liệu chuyển hướng S3 tương đương với siêu dữ liệu 301 Moved PermanentlySEO. Điều này hoạt động rất tốt khi truy cập URL trực tiếp từ tên miền S3.

Tôi cũng đã thiết lập phân phối CloudFront dựa trên nhóm trang web. Và khi tôi cố gắng truy cập thông qua bản phân phối của mình, chuyển hướng không hoạt động, tức là:

http://xxxx123.cloudfront.net/solution không chuyển hướng mà tải về tập tin trống thay thế.

Vậy câu hỏi của tôi là làm thế nào để chuyển hướng thông qua bản phân phối CloudFront? Hoặc bất kỳ ý tưởng về cách xử lý chuyển hướng mà không làm xấu đi SEO?

Cảm ơn

Câu trả lời:


47

Tôi gặp vấn đề này gần đây và tôi tìm thấy một cách giải quyết có vẻ hiệu quả.

Tôi đã tạo một bản phân phối Cloudfront với nguồn gốc tùy chỉnh trỏ đến tên máy chủ trang web tĩnh S3 thay vì tên máy chủ nhóm. Trong trường hợp của OP, nguồn gốc mong muốn sẽ là.

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

Đánh một bản phân phối Cloudfront chỉ sử dụng nhóm vì nguồn gốc không hoạt động vì nhóm không thực sự phục vụ chuyển hướng. Nó chỉ phục vụ các tập tin và lưu trữ siêu dữ liệu.

Mong rằng sẽ giúp.


Lưu ý rằng Cloudfront lưu trữ phản hồi chuyển hướng thay vì theo dõi nó. Do đó, tải xuống các tài nguyên bạn chuyển hướng để bỏ qua Cloudfront.
tfischbach

2
bmatsuo - Nếu chúng tôi có thể cung cấp cho bạn một tỷ điểm đại diện cho việc này, chúng tôi sẽ làm. Cảm ơn bạn rất nhiều. Bạn thực sự tiết kiệm trong ngày.
bắn tỉa

Điều này đã giúp rất nhiều! Đáng nói cho bất kỳ ai mới sử dụng S3: để tạo một nhóm tĩnh, hãy chuyển đến nhóm của bạn và truy cập tab Thuộc tính. Nhấp vào Lưu trữ trang web tĩnh. Điều đó sẽ cung cấp cho bạn URL chính xác cho phép chuyển tiếp :)
rick6

2

Phân tích

Theo Hành vi Yêu cầu và Phản hồi được ghi lại và Mã trạng thái HTTP được hỗ trợ cho Nguồn gốc tùy chỉnh , Amazon CloudFront không tuân theo Chuyển hướng , không may:

[...] Sau khi bạn định cấu hình chuyển hướng, lần đầu tiên người dùng cuối gửi yêu cầu cho đối tượng, CloudFront Front sẽ gửi yêu cầu đến điểm gốc và nguồn gốc phản hồi với chuyển hướng (ví dụ: 302 Đã di chuyển tạm thời). CloudFront lưu trữ chuyển hướng và trả lại cho người dùng cuối. CloudFront không tuân theo chuyển hướng. [nhấn mạnh của tôi]

Tất nhiên, bạn đang sử dụng Amazon S3 chứ không phải nguồn gốc tùy chỉnh và một phần liên quan đáng chú ý vắng mặt trong Hành vi yêu cầu và phản hồi cho Nguồn gốc Amazon S3 , nhưng các chuyển hướng của Amazon S3 chỉ được thêm vào gần đây (xem Amazon S3 - Hỗ trợ cho trang web Chuyển hướng ), nó có thể vẫn còn thiếu ở đó.

Theo đó, tôi mạo hiểm đoán rằng bạn sẽ không nhận được một tệp trống với mã trạng thái HTTP 200 OK , thay vào đó là trạng thái HTTP 301 Đã di chuyển vĩnh viễn mà không có phần thân nào - bạn đã thực sự kiểm tra điều này bằng trình duyệt hay cuối cùng chỉ bằng một công cụ dòng lệnh như vd: cURL hay HTTPie ? Các công cụ sau thường yêu cầu một tham số rõ ràng để theo dõi chuyển hướng, vì vậy điều này có thể dễ dàng được chú ý.

Giải pháp tiềm năng

Nếu phân tích hóa ra là chính xác, bạn cần định cấu hình chuyển hướng để nhắm mục tiêu rõ ràng vào CloudFront thay vào đó, xem lại Chuyển hướng :

Bạn có thể định cấu hình máy chủ web của mình để chuyển hướng yêu cầu đến một trong các vị trí sau:

  • URL mới của đối tượng trên máy chủ gốc. Khi người dùng cuối thực hiện theo chuyển hướng đến URL mới, người dùng cuối sẽ bỏ qua CloudFront và đi thẳng đến điểm gốc. Do đó, chúng tôi khuyên bạn không nên chuyển hướng yêu cầu đến URL mới của đối tượng trên nguồn gốc.

  • URL CloudFront mới cho đối tượng. Khi người dùng cuối gửi yêu cầu chứa URL CloudFront mới, CloudFront sẽ nhận đối tượng từ vị trí mới trên nguồn gốc của bạn, lưu trữ nó ở vị trí cạnh và trả lại đối tượng cho người dùng cuối. Các yêu cầu tiếp theo cho đối tượng sẽ được phục vụ bởi vị trí cạnh. Điều này tránh độ trễ và tải liên quan đến người xem yêu cầu đối tượng từ gốc. Tuy nhiên, mọi yêu cầu mới cho đối tượng sẽ phải chịu phí cho hai yêu cầu tới CloudFront.


Khi tôi xác nhận URL phải được chuyển hướng qua bản phân phối CloudFront tôi nhận được: HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 Tôi hiểu rằng việc chuyển hướng được quản lý bởi S3 và trong trường hợp này, tệp được lưu trữ bởi CloudFront và nó không quan tâm đến các tiêu đề chuyển hướng được đặt cho S3 Như S3 là máy chủ web của tệp Tôi không thể ánh xạ chuyển hướng khác với siêu dữ liệu.
Yannick Chaze
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.