Настройка страниц ошибок для CloudFront при использовании конечных точек API SEST REST - PullRequest
0 голосов
/ 29 января 2019

У меня есть дистрибутив CloudFront, который указывает на корзину S3, содержащую статический контент моего сайта.Это делается с использованием конечных точек API SEST REST, поэтому доменное имя и путь источника выглядят так:

bucket-name.s3.amazonaws.com

Пока это работает, и я знаю это, потому что когда я открываю браузер и ввожу https://xxxxxxxxxxxxx.cloudfront.net/index.html, он загружает HTML-файл.Но это еще не все, что мне нужно.Мой сайт представляет собой SPA (одностраничное приложение), написанное на React.Это означает, что не все ресурсы, упомянутые в коде на стороне клиента, могут быть найдены в корзине.Те ресурсы, которые физически недоступны в корзине, являются виртуальными ресурсами и должны обрабатываться кодом на стороне клиента.

Чтобы это работало, если пользователь вводит адрес виртуального URL-адреса в браузерсначала сервер должен проверить, существует ли этот ресурс или нет.Если это не так, сервер должен вернуть файл index.html вместо ошибки 404.Это можно настроить на страницах ошибок CloudFront.

Таким образом, я создал ответ об ошибках на основе для моего дистрибутива CloudFront, который обрабатывает все 404 ошибки, возвращая файл index.html со статусом 200 ok.Но это не работает.

При вводе URL https://xxxxxxxxxxxxx.cloudfront.net/virtual-url возвращается:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>39E3967AA5F16693</RequestId>
<HostId>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</HostId>
</Error>

Даже голый URL https://xxxxxxxxxxxxx.cloudfront.net возвращает точно такую ​​же ошибку.

Итак, мой вопрос: как я могу использовать страницы ошибок CloudFront, когда в дистрибутиве используется конечная точка API SEST REST?

PS Когда я использовал статическую конечную точку веб-сайта S3 (bucket-name.s3-website.us-east-1.amazonaws.com), тот же механизмработал.

...