Właśnie przeprowadziliśmy migrację do Amazon AWS. Obecnie mamy instancję EC2, która działa dobrze. Z przodu działa Nginx, a z tyłu Apache. To też działa dobrze. Wszystkie witryny są uruchamiane poprawnie i zawierają nagłówek Cache-Control dla plików obsługiwanych z EC2.
Problem dotyczy WSZYSTKICH plików statycznych, które umieściliśmy w Amazon S3 , do których dostęp jest uzyskiwany za pośrednictwem CloudFront CDN . Możemy uzyskać dostęp do plików w porządku (i nie ma problemu z CORS), ale najwyraźniej CloudFront nie obsługuje plików z nagłówkiem Cache-Control. Chcemy wykorzystać buforowanie przeglądarki.
Z mojego punktu widzenia instancja EC2 nie odgrywa tutaj roli, ponieważ pliki statyczne są obsługiwane bezpośrednio przez S3 + CloudFront, żądanie nie trafia do serwera WWW w EC2.
Jestem całkowicie zagubiony.
Pytanie: 1) Jak ustawić Cache-Control w tym przypadku? 2) Czy można ustawić Cache-Control? Z S3 lub CloudFront?
Uwaga: trafiłem na kilka stron w Google, gdzie możesz ustawić nagłówek w S3 dla poszczególnych obiektów. To naprawdę nie jest produktywny sposób, aby to zrobić specjalnie, ponieważ w moim przypadku mówimy o kilku przedmiotach.
Dzięki!
Odpowiedzi:
Cóż, „produktywne” czy nie, tak właśnie jest zaprojektowane.
CloudFront nie dodaje
Cache-Control:
nagłówków.CloudFront przechodzi, przez (a także względem, o ile inaczej skonfigurowane) w
Cache-Control:
nagłówkowe serwera pochodzenia, która w tym przypadku jest S3.Aby uzyskać
Cache-Control:
nagłówki dostarczone przez S3 podczas pobierania obiektu, należy je podać, gdy obiekt zostanie przesłany do S3 lub dodany do metadanych obiektu przez kolejną operację umieszczania i kopiowania, której można użyć do wewnętrznego skopiowania obiektu do siebie w S3, modyfikując metadane w procesie. To właśnie robi konsola poza sceną, jeśli edytujesz metadane obiektu.Nie ma też (na wypadek, gdybyś się zastanawiał) żadnego globalnego ustawienia w S3, które zmusiłoby wszystkie obiekty w wiadrze do zwrócenia tych nagłówków - jest to atrybut na obiekt.
Aktualizacja: Lambda @ Edge to nowa funkcja w CloudFront, która pozwala uruchamiać wyzwalacze dla żądań i / lub odpowiedzi, między przeglądarką a pamięcią podręczną i / lub pamięcią podręczną i źródłem, uruchamiając kod napisany w Node.js w stosunku do prostej struktury obiektu żądania / odpowiedzi narażone przez CloudFront.
Jedną z głównych aplikacji dla tej funkcji jest manipulowanie nagłówkami ... więc chociaż powyższe jest nadal dokładne - sam CloudFront nie dodaje
Cache-Control
- możliwe jest teraz, aby funkcja Lambda dodała je do odpowiedzi zwróconej z CloudFront.Ten przykład dodaje
Cache-Control: public, max-age=86400
tylko wtedy, gdyCache-Control
nagłówek nie zawiera już odpowiedzi.Użycie tego kodu w wyzwalaczu Origin Response spowoduje, że będzie on uruchamiany za każdym razem, gdy CloudFront pobierze obiekt od źródła, i zmodyfikuje odpowiedź, zanim CloudFront go buforuje.
Aktualizacja (2018-06-20): Niedawno wysłałem żądanie funkcji do zespołu CloudFront, aby umożliwić konfigurację statycznych nagłówków odpowiedzi na pochodzenie jako atrybutów pochodzenia, podobnie jak w przypadku dodawania statycznych nagłówków żądania , teraz ... ale z twist, umożliwiając skonfigurowanie dodawania każdego nagłówka warunkowo (tylko jeśli źródło nie podało tego nagłówka w odpowiedzi) lub bezwarunkowo (dodając nagłówek i nadpisując nagłówek z tego miejsca, jeśli jest obecny).
W przypadku żądań funkcji zazwyczaj nie otrzymujesz żadnego potwierdzenia, czy rozważają wdrożenie nowej funkcji ... lub nawet czy już nad nią pracowali ... jest to po prostu ogłaszane, kiedy skończą. Nie mam więc pojęcia, czy zostaną one wdrożone. Trzeba wysunąć argument, że ponieważ ta funkcja jest już dostępna za pośrednictwem Lambda @ Edge, nie ma takiej potrzeby w podstawowej funkcjonalności ... ale moim argumentem jest to, że podstawa funkcjonalnie nie jest kompletna bez funkcji wykonuj proste, statyczne operacje na nagłówkach odpowiedzi, i jeśli jest to jedyny powód, dla którego potrzebny jest wyzwalacz, to wymaganie wyzwalaczy Lambda jest niepotrzebnym kosztem, finansowym i dodatkowym opóźnieniem (chociaż nie jest to koniecznie koszt dziwaczny).
źródło