Szukałem sposobów na szybsze ładowanie mojej witryny, a jednym ze sposobów, który chciałbym zbadać, jest lepsze wykorzystanie Cloudfront.
Ponieważ Cloudfront pierwotnie nie został zaprojektowany jako CDN niestandardowego pochodzenia i ponieważ nie obsługiwał gzippingu, do tej pory używałem go do hostowania wszystkich moich obrazów, do których odwołuje się ich nazwa Cloudfront w kodzie mojej witryny, i zoptymalizowanych do tej pory przyszłe nagłówki.
Z drugiej strony pliki CSS i javascript są hostowane na moim własnym serwerze, ponieważ do tej pory miałem wrażenie, że nie można ich udostępniać w formacie gzip z Cloudfront i że zysk z gzippingu (około 75 procent) przewyższa to z użycia CDN (około 50 procent): Amazon S3 (a zatem Cloudfront) nie obsługiwał standardowego wyświetlania treści spakowanych gzipem przy użyciu nagłówka HTTP Accept-Encoding wysyłanego przez przeglądarki w celu wskazania ich obsługi kompresji gzip, oraz więc nie byli w stanie zgzipować i podawać komponentów w locie.
Dlatego miałem wrażenie, że do tej pory trzeba było wybierać między dwiema alternatywami:
przenieś wszystkie zasoby do Amazon CloudFront i zapomnij o GZipping;
utrzymuj komponenty na własnym serwerze i skonfiguruj nasz serwer, aby wykrywał przychodzące żądania i odpowiednio wykonywał GZipping w locie, co dotychczas wybrałem.
Tam były obejścia aby rozwiązać ten problem, ale w zasadzie to nie działa . [ link ].
Teraz wygląda na to, że Amazon Cloudfront obsługuje niestandardowe pochodzenie i że można teraz używać standardowej metody kodowania HTTP Accept-Encoding do wyświetlania treści spakowanych gzipem, jeśli używasz niestandardowego źródła [ link ].
Do tej pory nie byłem w stanie wdrożyć nowej funkcji na moim serwerze. Post na blogu, do którego odsyłam powyżej, który jest jedynym, który znalazłem szczegółowo opisujący zmianę, wydaje się sugerować, że możesz włączyć gzipping (obejścia paska, których nie chcę używać), jeśli wybierzesz niestandardowe pochodzenie, które Wolałbym nie: uważam, że łatwiej jest hostować odpowiednie pliki na moim serwerze Cloudfront i stamtąd do nich link. Mimo starannego przeczytania dokumentacji nie wiem:
czy nowa funkcja oznacza, że pliki powinny być hostowane na moim własnym serwerze domeny przez niestandardowe pochodzenie, a jeśli tak, to jaki kod to osiągnie;
jak skonfigurować nagłówki css i javascript, aby upewnić się, że są one dostarczane w formacie gzip z Cloudfront.
źródło
Moja odpowiedź jest taka: http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html
Opierając się na odpowiedzi skylera, możesz wgrać css i js w wersji gzip i non-gzip. Bądź ostrożny, nazywając i testując w Safari. Ponieważ safari nie obsługuje
.css.gz
ani.js.gz
plików.site.js
isite.js.jgz
orazsite.css
isite.gz.css
(musisz ustawićcontent-encoding
nagłówek do odpowiedniego typu MIME, aby uzyskać te służyć prawo)Następnie na swojej stronie umieść.
gzipcheck.js.jgz jest po prostu
sr_gzipEnabled = true;
Ten test sprawdza, czy przeglądarka może obsłużyć spakowany kod i zapewnić kopię zapasową, jeśli nie mogą.Następnie zrób coś podobnego w stopce, zakładając, że wszystkie twoje pliki są w jednym pliku i mogą iść w stopce.
AKTUALIZACJA: Amazon obsługuje teraz kompresję gzip. Ogłoszenie, więc nie jest już potrzebne. Ogłoszenie Amazon
źródło
Cloudfront obsługuje gzipping.
Cloudfront łączy się z twoim serwerem przez HTTP 1.0. Domyślnie niektóre serwery WWW, w tym nginx, nie wyświetlają treści spakowanych gzipem w połączeniach HTTP 1.0, ale możesz to zrobić, dodając:
do twojej konfiguracji nginx. Odpowiednią konfigurację można ustawić dla dowolnego używanego serwera WWW.
Ma to efekt uboczny polegający na tym, że połączenia utrzymujące aktywność nie działają w przypadku połączeń HTTP 1.0, ale ponieważ korzyści z kompresji są ogromne, zdecydowanie warto z tego skorzystać.
Zaczerpnięte z http://www.cdnplanet.com/blog/gzip-nginx-cloudfront/
Edytować
Udostępnianie treści, które są zgzipowane w locie przez chmurę Amazon, jest niebezpieczne i prawdopodobnie nie powinno się tego robić. Zasadniczo, jeśli serwer WWW zgrywa zawartość, nie ustawi długości treści i zamiast tego wyśle dane jako porcje.
Jeśli połączenie między Cloudfront a twoim serwerem zostanie przerwane i przedwcześnie zerwane, Cloudfront nadal buforuje częściowy wynik i służy jako wersja buforowana aż do wygaśnięcia.
Przyjęta odpowiedź, że najpierw zgolisz go na dysku, a następnie udostępnisz wersję gzipped, jest lepszym pomysłem, ponieważ Nginx będzie mógł ustawić nagłówek Content-Length, a więc Cloudfront odrzuci okrojone wersje.
źródło
Niedawno dokonaliśmy kilku optymalizacji dla uSwitch.com w celu skompresowania niektórych zasobów statycznych na naszej stronie. Chociaż skonfigurowaliśmy do tego celu cały serwer proxy Nginx, stworzyłem również małą aplikację Heroku, która pośredniczy między CloudFront i S3 w celu kompresji zawartości: http://dfl8.co
Biorąc pod uwagę publicznie dostępne obiekty S3, można uzyskać dostęp za pomocą prostej struktury URL, http://dfl8.co po prostu używa tej samej struktury. Czyli następujące adresy URL są równoważne:
źródło
Wczoraj Amazon ogłosił nową funkcję, teraz możesz włączyć gzip w swojej dystrybucji.
Działa z s3 bez dodanych plików .gz, wypróbowałem dziś nową funkcję i działa świetnie. (musisz jednak unieważnić twoje obecne obiekty)
Więcej informacji
źródło
Możesz skonfigurować CloudFront, aby automatycznie kompresował pliki niektórych typów i obsługiwał skompresowane pliki.
Zobacz Podręcznik programisty AWS
źródło