Zmusić CloudFront do przesłania najnowszego pliku HTML z S3



tło
>
Hostuję witrynę statyczną na S3 z CloudFront na górze. Mam problem z moimi plikami HTML.
Zgodnie z

CloudFront FAQ
http://aws.amazon.com/cloudfro ... files
:

Amazon CloudFront używa tych nagłówków kontroli pamięci podręcznej, aby określić, jak często należy sprawdzać źródło zaktualizowanej wersji tego pliku.


Co ja zrobiłem do tej pory
>
Mając to na uwadze, zainstalowałem pliki HTML w moim S3 Bucket, aby dodać następujące nagłówki:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT

Podczas pierwszego połączenia z moim
       samplefile.htm
Widzę następujące nagłówki odpowiedzi (wykluczyłem oczywiste nagłówki (np.
       Content-Type
) aby być na bieżąco z tematem:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront

Jak widać, my
       Cache-Control
kierując się tam. Problem polega na tym, że jeśli zaktualizuję ten plik i zaktualizuję, otrzymam zawartość z pamięci podręcznej (nie najnowszy plik) i widzę, że CloudFront obsługuje swoją buforowaną wersję, patrząc na nagłówki odpowiedzi:
       X-Cache:Hit from cloudfront

CV/pytanie
>
Mając to na uwadze, jak mogę automatycznie uzyskać najnowszy HTML podczas korzystania z CloudFront?
Zgodnie z jego FAQ mogę to zrobić z nagłówkami Cache-Control, ale nie mogę tego uruchomić.

Po odpowiedziach poniżej
>
W końcu zdecydowałem się zmienić mój CNAME www, aby wskazywał bezpośrednio na mój wiadro S3. Następnie dodano nowy rekord CNAME o nazwie „static”, aby wskazywał na CloudFront.
Oznacza to, że HTML pochodzi bezpośrednio z S3, gdzie wszystkie linki CSS/JS/IMG wskazują na static.mydomain.com
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Uważam, że odpowiedzi w tym momencie, choć w tamtym czasie poprawne, są teraz nieaktualne, ponieważ Cloudfront obsługuje teraz minimalny TTL równy 0, a pierwotna próba użycia wieku pamięci podręcznej = 0 przez OP powinna teraz działać.
Możesz sprawdzić, czy użyć tych innych nagłówków do zarządzania pamięcią podręczną, pod względem tego, czy dają one wynik, którego szukasz - możesz potrzebować tylko max-age. Prawdopodobnie chcesz, aby Cloudfront sprawdził S3, aby sprawdzić, czy plik HTML się zmienił. Jeśli tak, Cloudfront może pobrać i zaewidencjonować nowy plik. W przeciwnym razie może obsługiwać klienta z istniejącej pamięci podręcznej (oszczędzając przepustowość S3 i obsługując klienta szybciej i bardziej lokalnie).
Zadaniem Cloudfront jest udostępnianie zawartości w pamięci podręcznej, tak, ale teraz obejmuje ona zawartość, która czasami się zmienia, ale może być przechowywana w pamięci podręcznej, jeśli nie uległa zmianie.
P.s. Ciągi zapytań działają teraz również z Cloudfront (kolejna nowa funkcja, jeśli skonfigurujesz „zachowanie” dla odpowiedniego źródła), jednak niektóre serwery proxy mogą nadal nie buforować żadnych plików z ciągami zapytań.
Amazon Developer Guide: Expiration

1
http://docs.amazonwebservices. ... .html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Po pierwsze, celem Cloudfront jest obsługa zawartości z pamięci podręcznej - jeśli spróbujesz obsługiwać zawartość niebuforowaną z Cloudfront, będzie to wolniejsze niż serwowanie jej bezpośrednio z S3 w prawie wszystkich przypadkach (coś takiego jak przesyłanie strumieniowe byłoby wyjątkiem). Pomyśl przez chwilę, co musi się stać, aby udostępniać treści z Cloudfront - trzeba je pobrać z serwera źródłowego do lokalizacji, która jest geograficznie blisko użytkownika, co oznacza, że ​​w przypadku zapytania, w którym Cloudfront musi pobrać zawartość z serwera źródłowego , dodajesz dodatkowe opóźnienie do żądania, a użytkownik wolniej pobiera zawartość. Dopiero gdy treść staje się dostępna na krawędzi, kolejne żądania są uruchamiane szybciej.
Najlepszym podejściem do tego problemu jest zmiana nazw plików podczas odświeżania strony - zmusi to Cloudfront do pobrania nowej zawartości. Pamiętaj, że Cloudfront jest zwykle używany do plików multimedialnych (w tym obrazów) i style/javascript - a nie do html. Zasadniczo twój HTML będzie na S3, a twoje obrazy będą w Cloudfront - niezależnie od wprowadzonych zmian, możesz zmienić nazwę pliku w Cloudfront (np. File-v1.jpg, file-v2.jpg itp.) ... Innym typowym sposobem jest dołączenie ciągu zapytania z informacjami o wersji.
Pamiętaj również, że Cloudfront nie obsługuje treści skompresowanych przy użyciu gzip, co może skutkować wolniejszymi czasami odpowiedzi niż ze zwykłego serwera (chociaż w twoim przypadku S3 również nie identyfikuje przeglądarek obsługujących gzip).
Wreszcie, jeśli chcesz, możesz użyć odwołania, aby zmusić Cloudfront do porzucenia istniejącej kopii i pobrania nowej z oryginalnego serwera. Należy jednak pamiętać, że Cloudfront zapewnia tylko 1000 bezpłatnych anulowań miesięcznie, po czym koszt wynosi 0,005 USD za anulowanie.
Minimalny czas przechowywania zawartości przez Cloudfront to

1 godzina
http://aws.typepad.com/aws/201 ... .html
chociaż wartość domyślna to 24 godziny. Więc spróbuję ustawić max-age na co najmniej 3600. Weź również pod uwagę nagłówek s-maxage (ogólnie, tj. Zawartość proxy). Amazon poleca

to
http://www.mnot.net/cache_docs/
samouczek buforowania.
Było

ostatni problem
https://forums.aws.amazon.com/ ... 77954
z tym, naprawiono kilka dni temu
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jestem pewien, jak CloudFront obsługuje nagłówek tak samo, jak twój, ale jeśli nie określisz nagłówków, domyślny czas odświeżania obiektu to 24 godziny.
Jedną z rzeczy, które możesz zrobić, aby zaktualizować obiekty, jest unieważnienie zawartości. Aby uzyskać więcej informacji, skorzystaj z poniższego łącza.

http://blog.cloudberrylab.com/ ... .html
http://blog.cloudberrylab.com/ ... .html

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się