Как добавить дочерний сайт (SPA) в качестве поведения в существующий дистрибутив Cloudfront в качестве поведения без изменения страницы 404 для дистрибутива? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь разместить SPA на существующем дистрибутиве CloudFront, используя способы поведения для маршрутизации к соответствующей корзине S3.Проблема, с которой я сталкиваюсь, заключается в том, что у CloudFront Distribution есть специальная настройка на 404 страницы.У меня нет возможности указать его на index.html внутри моего сегмента S3, и создание отдельного дистрибутива не вариант, так как требует использования того же CNAME, который не поддерживается.Если я укажу всю страницу 404 дистрибутивов на файл index.html внутри корзины S3, он будет работать, но на родительском сайте все 404 ошибки будут направлены в мой SPA.

Из-за проблемы 404 мое приложениенеправильно обрабатывает при обработке ошибок.Какая у меня альтернатива?Я знаком с основами AWS, но есть ли более продвинутое решение?

1 Ответ

0 голосов
/ 23 апреля 2019

Использование пользовательских страниц ошибок

Если вы настроите корзину S3 вашего SPA как S3 origin, CloudFront будет использовать конечную точку REST API вашей корзины, что приведет к 403 ошибкам вместоОшибки 404.

Затем вы можете настроить страницу ошибки 403 в CloudFront.

Использование Lambda @ Edge

Вы можете переписать URL-адрес на /index.html с функцией Origin Request Lambda @ Edge в поведении, которое перенаправляет запросы в SPA:

const path = require('path');

exports.handler = (event, context, callback) => {
  const { request } = event.Records[0].cf;

  // Rewrite uri without extensions only
  // Will rewrite /blabla to /index.html but not /abc.txt or /xyz.css
  if (!path.extname(request.uri)) request.uri = '/index.html';

  callback(null, request);
};

Преимущество этого решения состоит в том, что он не изменяет код состояния HTTP (он остается200).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...