Подтвердить что ты не робот

Amazon S3 Redirect и Cloudfront

Я пытаюсь настроить 301 переадресацию на S3 с помощью объектов, на которые ссылается здесь http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html. У меня были некоторые проблемы, и я не могу понять, что я делаю неправильно.

То, что я получаю, - это пустая страница (0 байтовый файл), как если бы значение метаданных "Переадресация веб-сайта" не было установлено.

Что я делаю неправильно?

Также работает ли это на AWS CloudFront?


Моя настройка консоли S3 S3 Console Setup

Пара примечаний:

У меня есть эта настройка для размещения статического сайта. Я использую ssl/https с моим собственным сертификатом, загруженным и установленным в облачном дистрибутиве. Кажется, что все страницы работают, за исключением перенаправляющих объектов. Я попытался настроить правила маршрутизации, но они, похоже, не работали в Cloudfront.

Я пытаюсь получить доступ к перенаправлению как через url облачного интерфейса, так и с s3 url (https://s3.amazonaws.com/ {bucket}/users/sign_in )

4b9b3361

Ответ 1

Для функциональности, подобной веб-сайту в S3, такой как перенаправления, html-сообщения об ошибках и индексные документы, нельзя использовать конечную точку REST (${bucket_name}.s3.amazonaws.com или ${bucket_name}.s3.${region}.amazonaws.com), поскольку эти функции предоставляются только конечными точками веб-сайта (${bucket_name}.s3-website.${region}.amazonaws.com).

http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html

Чтобы сделать поведение доступным в Cloudfront, вам необходимо настроить Cloudfront для использования этой конечной точки, а не REST, предлагаемой через автозаполнение в консоли.

Введите конечную точку хостинга статического сайта Amazon S3 для своего сегмента. Это значение отображается в консоли Amazon S3 на странице свойств в разделе " Хостинг статических веб-сайтов".

Когда вы указываете имя сегмента в этом формате, вы можете использовать перенаправления Amazon S3 и пользовательские документы об ошибках Amazon S3.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html

Обратите внимание, что веб-конечные точки не поддерживают HTTPS, но вы можете настроить Cloudfront для выборки из корзины с HTTP, даже если клиентское соединение - HTTPS.


Полезный совет: при устранении неполадок и тестировании изменений с CloudFront пользователей часто смущает очевидная "задержка" между тем, когда вы вносите изменения, и когда CloudFront начинает демонстрировать новое поведение. В случае страниц с ошибками CloudFront по умолчанию имеет 5-минутный минимальный TTL для кэширования ошибок, который не позволяет ему повторно отправлять запросы на сбойные страницы в источник, и это отдельный таймер из минимального/стандартного/максимального TTL, установленного в поведении кэша., В частности, при тестировании вы можете отключить эти таймеры и принудительно повторять каждый последующий запрос страниц, которые возвращали ошибки, используя шаги, которые я указал в ответе на вопрос о явной латентности Amazon CloudFront.

Ответ 2

У меня была та же проблема с ошибками перенаправления и загрузкой файлов нулевой длины, но я не использовал Cloudfront.

Основной причиной в моем случае была запись DNS CNAME, указывающая на конечную точку REST (static.righto.com. s3- us-west-2.amazonaws.com) вместо конечной точки веб-сайта (static.righto.com. [CN10 ] сайт -us-west-2.amazonaws.com). Обновление записи CNAME исправило мои перенаправления.

Еще одним признаком этой проблемы было отсутствие страниц, отображавших страницу с ошибкой XML, а не страницу с ошибкой HTML.

Этот документ объясняет разницу между конечными точками веб-сайта и конечными точками REST.

Ответ 3

Если вы пришли сюда, чтобы найти решение без использования CloudFront, вот оно:

Вы можете использовать s3cmd (в bash-скрипте, конечно) и его параметры:

  • --add-header с x-amz-website-redirect-location

Например, этот скрипт решает проблему для страницы /about/:

s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"

Этот скрипт скопировать некоторые существующий файл с новым именем файла без пробелов. Неважно, что содержит файл, потому что браузер будет перенаправлен немедленно.

Когда вы (и более важные веб-сканеры) пытаетесь открыть страницу /about вас, вы получаете 301 перенаправление на /about/. Это позволяет сохранить нужную страницу в кеше Google, Yandex и других поисковых систем.

Вы можете повторить этот код для нескольких страниц. Или вы можете добавить функциональность для поиска папок и сделать вызов для каждой. Вероятно, вы будете так добры показать это здесь :)