2012-04-19 21 views
6

Tôi có tệp JS và CSS được phân phát qua Amazon Cloudfront. Cho đến bây giờ tôi đã sử dụng máy chủ của riêng mình đang chạy Varnish và khi tôi cập nhật bất kỳ tệp JS hoặc CSS nào hoặc tôi phải làm gì để sử dụng phiên bản mới đó để tăng số lượt truy cập trên thông số URL theo yêu cầu cho tệp đó.Thêm thông số URL (? P = 234) vào một tệp trên Amazon Cloudfront không buộc làm mới tệp

Vì vậy, URL của tệp được bao gồm sẽ chuyển từ .../file.css? R = 1 thành .../file.css? R = 2 và Varnish sẽ coi đó là tệp mới, yêu cầu nó và cache nó và phục vụ nó từ cache từ thời điểm đó.

Với Cloudfront Tôi nhận ra nó không hoạt động như vậy, nó vẫn phục vụ tệp được lưu trong bộ nhớ cache cũ (và tôi tiếp tục bị "nhấn từ Cloudfront" trên phản hồi HTTP).

Bất kỳ ý tưởng nào nếu tôi có thể thay đổi hành vi của Cloudfront cho điều này?

Bất kỳ điều gì khác tôi có thể làm không ngụ ý thực sự thay đổi tên của tệp mỗi khi tôi cập nhật tệp? Tôi cũng không muốn sử dụng tính năng không hợp lệ của bộ nhớ cache thông qua API của Cloudfront. Tôi nghĩ rằng đó là quá nhiều công việc cho những gì tôi đang cố gắng làm ở đây, và có một số lượng hạn chế (miễn phí) yêu cầu mỗi tháng tôi có thể thực hiện.

+0

Sử dụng "Truy vấn chuỗi chuyển tiếp và lưu vào bộ nhớ cache" trong Cài đặt hành vi cache. Đặt giá trị thành "Chuyển tiếp tất cả, bộ đệm dựa trên tất cả" nếu bạn muốn Cloudfront hỏi nguồn cho tệp mới mỗi khi có thông số truy vấn hoặc "Chuyển tiếp tất cả, bộ nhớ cache dựa trên danh sách cho phép" nếu bạn chỉ muốn Cloudfront nhận phiên bản mới tùy thuộc vào danh sách trắng các thông số truy vấn. –

Trả lời

3

Có vẻ như bạn đã quá tháng trước ... vào giữa tháng 5 năm 2012, Amazon đã thông báo rằng bạn có thể bắt đầu sử dụng chuỗi truy vấn để xác định các đối tượng trong bộ nhớ cache trên đám mây của mình.

Dưới đây là một liên kết đến thông báo trên blog của họ: http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html

Thật không may, tôi không thấy bất kỳ liên kết trong googling nhanh chóng của tôi mô tả cách chính xác, bạn có thể làm điều này nhưng tôi chắc chắn nó được chôn trong tài liệu của họ hoặc bảng điều khiển ở đâu đó.

Hy vọng điều này sẽ giúp bạn đi đúng hướng.

+0

Tôi không nghĩ rằng tính năng này đã được thực hiện để có được xung quanh bộ nhớ cache, mà là một cách để tạo bộ nhớ cache tĩnh từ nội dung động. – Ascherer

+0

Thấy nó, đó là chính xác những gì tôi muốn :) – manuelflara

1

Thật không may nếu bạn muốn tránh đổi tên các tệp, việc vô hiệu hóa qua API của CloudFront có vẻ là tùy chọn duy nhất hiện có tại thời điểm này. Tuy nhiên, nỗi đau khi đổi tên các tập tin có thể được giảm thiểu bằng cách tự động hóa quy trình triển khai.

+1

Thay vì sử dụng tính năng vô hiệu này, bạn cũng có thể thêm thông số trong URL làm một phần của đường dẫn truy vấn. Với một số URL viết lại tác phẩm này một cách hoàn hảo. – Wouter

0

Câu trả lời ngắn gọn, không. CDN nên được sử dụng cho các tài sản tĩnh không thay đổi thường xuyên.

Từ docs của họ:

Khi CloudFront yêu cầu một đối tượng từ máy chủ gốc, nó loại bỏ bất kỳ thông số chuỗi truy vấn.

Hãy chắc chắn rằng máy chủ của bạn được thiết lập để vượt qua đúng Expires tiêu đề và/hoặc Cache-Control: max-age tiêu đề. Chúng tôi hiện đang sử dụng max-age = 1800

+0

tại sao điều này lại bị giảm giá? – Ascherer

+1

Hoàn toàn không đồng ý với điều này. Nhiều người trong cộng đồng web sử dụng chuỗi truy vấn là "bộ đệm cache" để xem các phiên bản được lưu trong bộ nhớ cache của tài sản cần phải bỏ qua (chẳng hạn như sửa lỗi trong tệp js của bạn mà bạn đã đặt hết hạn trong 30 ngày trong tương lai) .Điều tương tự cũng xảy ra đối với các tệp css, hình ảnh và bất kỳ thứ gì khác mà bạn muốn lưu trữ trên CDN. Thực tế là, các tài sản tĩnh thay đổi và bạn cần cơ chế này để bỏ qua bất kỳ mục nào được lưu trữ trước đó trên máy khách. – longda

+1

Bạn có vẻ đang giải thích cho tôi rằng "không thay đổi thường xuyên" là "không bao giờ thay đổi". Tôi có thể thấy thuật ngữ "thường" có thể khá chủ quan. Cloudfront xóa chuỗi truy vấn khi yêu cầu xuất xứ (theo mặc định - mặc dù hiện tại chúng hỗ trợ chuyển nó qua). Điều đó không có nghĩa là bạn vẫn không thể sử dụng chúng để chặn bộ nhớ cache của trình duyệt. Đối với các vấn đề khác bạn đã đề cập, bạn có khả năng làm mất hiệu lực đối tượng trên cdn (để sửa lỗi, v.v.) và nên sử dụng phiên bản cho nội dung thay đổi thường xuyên hơn. – kmfk

Các vấn đề liên quan