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 )
Ответы
Ответ 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 и других поисковых систем.
Вы можете повторить этот код для нескольких страниц. Или вы можете добавить функциональность для поиска папок и сделать вызов для каждой. Вероятно, вы будете так добры показать это здесь :)