Я искал способы ускорить загрузку моего сайта, и один из способов, который я хотел бы изучить, - это более широкое использование Cloudfront.
Из-за того, что Cloudfront изначально не был разработан как CDN пользовательского происхождения, и поскольку он не поддерживал gzipping, я до сих пор использовал его для размещения всех моих изображений, на которые ссылается их имя Cloudfront cname в коде моего сайта, и оптимизировал для фьючерсные заголовки.
Файлы CSS и javascript, с другой стороны, размещены на моем собственном сервере, потому что до сих пор у меня сложилось впечатление, что их нельзя обслуживать в gzip-архиве из Cloudfront, и что выгода от gzipping (около 75%) превышает от использования CDN (около 50%): Amazon S3 (и, следовательно, Cloudfront) не поддерживал стандартную обработку gzip-содержимого с помощью заголовка HTTP Accept-Encoding, отправляемого браузерами для указания их поддержки сжатия gzip, и поэтому они не могли Gzip и обслуживать компоненты на лету.
Таким образом, до сих пор у меня сложилось впечатление, что нужно выбирать между двумя альтернативами:
перенести все активы в Amazon CloudFront и забыть о GZipping;
оставляйте компоненты размещенными самостоятельно и настраивайте наш сервер для обнаружения входящих запросов и выполнения GZipping на лету в зависимости от ситуации, что я и решил сделать до сих пор.
Там были обходные пути , чтобы решить эту проблему, но по существу они не работают . [ ссылка ].
Похоже, что Amazon Cloudfront поддерживает пользовательское происхождение, и теперь можно использовать стандартный метод HTTP Accept-Encoding для обслуживания сжатого содержимого, если вы используете пользовательское происхождение [ ссылка ].
До сих пор я не смог реализовать новую функцию на моем сервере. Сообщение в блоге, на которое я ссылался выше, - единственное, в котором я нашел подробное описание изменения, похоже, подразумевает, что вы можете включить gzipping (обходные пути, которые я не хочу использовать), если вы выбираете пользовательское происхождение, которое Я бы предпочел этого не делать: я считаю, что проще размещать соответствующие файлы на моем сервере Cloudfront и ссылаться на них оттуда. Несмотря на тщательное чтение документации, я не знаю:
означает ли новая функция, что файлы должны быть размещены на моем собственном доменном сервере через пользовательское происхождение, и если да, то какая настройка кода достигнет этого;
как настроить заголовки css и javascript, чтобы обеспечить их доставку из Cloudfront.
источник
Мой ответ на это: http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html
Построив ответ Скайлера, вы можете загрузить версии css и js для gzip и non-gzip. Будьте осторожны с именами и тестируйте в Safari. Потому что сафари не справится
.css.gz
или.js.gz
файлы.site.js
иsite.js.jgz
иsite.css
иsite.gz.css
(вам нужно установитьcontent-encoding
заголовок на правильный тип MIME, чтобы они работали правильно)Тогда в вашей странице положить.
просто gzipcheck.js.jgz
sr_gzipEnabled = true;
тест Он проверяет, может ли браузер обрабатывать сжатый код и предоставляет резервную копию, если не может.Затем сделайте что-то похожее в нижнем колонтитуле, предполагая, что все ваши js находятся в одном файле и могут идти в нижнем колонтитуле.
ОБНОВЛЕНИЕ: Amazon теперь поддерживает сжатие gzip. Объявление, так что это больше не нужно. Амазонское Объявление
источник
Cloudfront поддерживает gzipping.
Cloudfront подключается к вашему серверу через HTTP 1.0. По умолчанию некоторые веб-серверы, в том числе nginx, не подают сжатый контент на соединения HTTP 1.0, но вы можете указать это, добавив:
в ваш конфиг nginx. Эквивалентная конфигурация может быть установлена для любого веб-сервера, который вы используете.
Это имеет побочный эффект, заключающийся в том, что поддерживающие соединения не работают для соединений HTTP 1.0, но поскольку преимущества сжатия огромны, это определенно стоит компромисса.
Взято с http://www.cdnplanet.com/blog/gzip-nginx-cloudfront/
редактировать
Подача контента, который распространяется на лету через облачный фронт Amazon, опасна и, вероятно, не должна выполняться. По сути, если ваш веб-сервер распаковывает содержимое, он не устанавливает Content-Length и вместо этого отправляет данные в виде фрагментов.
Если соединение между Cloudfront и вашим сервером прервано и преждевременно разорвано, Cloudfront все еще кэширует частичный результат и использует его в качестве кэшированной версии до истечения срока его действия.
Принятый ответ - сначала распаковать его на диск, а затем отправить версию в сжатом виде - это лучшая идея, поскольку Nginx сможет установить заголовок Content-Length, а Cloudfront откажется от усеченных версий.
источник
Недавно мы сделали несколько оптимизаций для uSwitch.com, чтобы сжать некоторые статические ресурсы на нашем сайте. Хотя для этого мы настроили целый прокси-сервер nginx, я также собрал небольшое приложение Heroku, которое проксирует между CloudFront и S3 для сжатия контента: http://dfl8.co
Если к общедоступным объектам S3 можно получить доступ с помощью простой структуры URL, http://dfl8.co просто использует ту же структуру. Т.е. следующие URL-адреса эквивалентны:
источник
Вчера Amazon объявил о новой функции, теперь вы можете включить gzip в вашем дистрибутиве.
Он работает с s3 без добавления .gz файлов самостоятельно, сегодня я попробовал новую функцию, и она отлично работает. (необходимо аннулировать ваши текущие объекты, хотя)
Больше информации
источник
Вы можете настроить CloudFront для автоматического сжатия файлов определенных типов и обслуживания сжатых файлов.
См. Руководство для разработчиков AWS
источник