Перенаправить подпапку S3 в другой домен с помощью Cloudfront

У меня есть статический демонстрационный веб-сайт, размещенный на S3 и использующий CloudFront, а также интернет-магазин (Prestashop) и блог (Wordpress), оба размещенные на серверах OVH.

Я хочу сделать скрытое перенаправление на две подпапки моего статического веб-сайта, чтобы оно действовало так, как будто мои 3 веб-сайта находятся на одном хосте, используя следующую схему:

mysite.com/ -> нормальное поведениеmysite.com/blog/ -> myblog.com/mysite.com/store/ -> mystore.com/

Конечно, мне нужно, чтобы каждый запрос обрабатывался таким образом, чтобы в итоге получилось нечто подобное:

mysite.com/store/fr/1-myproduct.html

что возвращает

mystore.com/fr/1-myproduct.html

вернулся бы.

Это кажется действительно сложным, так как я не нашел реального решения своей проблемы, и на данный момент я сомневаюсь, что это вообще возможно. Я подумал об использовании прокси, но разве это не было бы похоже на использование кувалды, чтобы избавиться от мухи?

Я искал любое возможное перенаправление, и мне удалось найти только перенаправление субдоменов / доменов ...

Так что мой вопрос будет"Как мне это сделать ?" Но сейчас мне интересно"Можно ли это сделать?"

П.С .: Это мой первый пост за всю историю, я привык искать в течение долгого времени, прежде чем писать, и я всегда заканчиваю тем, что нашел решение, кроме как сейчас. Любое предложение приветствуется.

 Frédéric Henri01 авг. 2016 г., 14:54
Я не думаю, что вы можете именно то, что вы хотите без обратного прокси. но вы могли бы управлять записью A для пересылки на нужный сервер, вы могли бы пересылать store.mysite.com и blog.mysite.com на сервер ovh
 Arthur Vik Rucq01 авг. 2016 г., 15:09
@ FrédéricHenri Да, это то, что я хотел сделать, и это на самом деле выполнимо, но мои заинтересованные стороны абсолютно хотят, чтобы это было как подпапка для целей SEO. Спасибо за ваш ответ, хотя я проверю прокси, так как это моя последняя надежда (как драматично).

Ответы на вопрос(1)

Решение Вопроса

Я проверю прокси, так как это моя последняя надежда

Подождите.

У меня есть статический демонстрационный сайт, размещенный на S3 и использующий CloudFront

CloudFront - обратный прокси.

В зависимости от степени гибкости, которую вы имеете с двумя другими сайтами, CloudFront может перенаправить вас туда, куда вы хотите, объединяя несколько независимых сайтов под одним именем хоста.

Это делается путем создания дополнительных исходных серверов для ваших дистрибутивов, а затем создания дополнительных вариантов поведения кэша, причем шаблоны путей соответствуют дополнительным путям, таким как/blog а также/blog/* которые отправляют запросы в альтернативные источники.

Однако есть одна загвоздка. CloudFront не может удалить соответствующий шаблон, поэтому mainsite.example.com/blog/hello-world соответствует шаблону/blog/* будет перенаправлен на blog.example.com/blog/hello-world, а не на blog.example.com/hello-world.¹ Это потребует внесения изменений в другие сайты для их интеграции таким образом.

Если ...

Если у вас уже есть уникальные шаблоны путей, нет проблем, но если содержимое дополнительных сайтов находится в корне каждого отдельного сайта, вы увидите проблему здесь. Не непреодолимый, но все еще проблема.

Ваша единственная альтернатива - обратный проксипозади CloudFront для переписывания этих путей и отправки запросов на альтернативные серверы. На самом деле это тоже не проблема, поскольку HAProxy, Nginx и Varnish предлагают такую ​​функциональность и могут обрабатывать большое количество запросов прокси на удивительно небольшом оборудовании.

Недавно выпущенный (2017)Лямбда @ Край Сервис позволяет переписывать пути на лету, так как запросы обрабатываются при необходимости.

Но суть в том, что причина, по которой вы не нашли реального решения, кроме прокси, заключается в том, что альтернативы нет - каждый путь с данным именем хоста должен обрабатываться в одном логическом месте - одна группа из одного или нескольких идентично- настроенные конечные точки. В случае CloudFront логическое место физически распределено по всему миру.

¹ CloudFront изначально может предшествовать пути перед пересылкой запроса, поэтому запросы на mainsite.example.com/bar/fizz можно перенаправлять на foosite.example.com/foo/bar/fizz, указав в качестве исходного пути/foo когда вы настраиваете источник. Но он не может удалить части пути или иным образом изменить путь без использования Lambda @ Edge. В рассмотренном выше сценарии вы можете оставить исходный путь пустым при настройке дополнительных исходных серверов.

 Arthur Vik Rucq10 авг. 2016 г., 13:58
Чтобы ответить на мой предыдущий комментарий: Да! Если вы настроили перенаправление ошибки 404 вашего дистрибутива Cloudfront, любая ошибка 404, будь то удаленная или базовая, будет перенаправлена ​​на ту же ссылку, которую вы установили. Я пробовал с файлом index.html в myblog.com/blog и без него. С его помощью он корректно отображает содержимое, и без него возвращается к странице 404, которую я установил на моем базовом источнике, и, следовательно, переопределяет страницу 404 wordpress.
 Michael - sqlbot20 июл. 2017 г., 13:46
Берегись! Начиная с 2017-07-17, проблема, описанная в сноске 1, имеет собственное решение в Lambda @ Edge, которое позволяет вам выполнять собственный код Node.js внутри CloudFront для настройки URI запроса по мере необходимости. Если вы читаете это в будущем, попросите меня вернуться и добавить эту новую информацию.
 Frédéric Henri03 авг. 2016 г., 09:54
Довольно интересно, это дает хороший пример использования облачного фронта
 Arthur Vik Rucq09 авг. 2016 г., 16:22
Хорошо, так что я документирую, как я могу это сделать, спасибо за то, что просветили меня. На самом деле я начал работать над сайтом после его развертывания, поэтому я не видел Cloudfront таким образом (я думал, что это был всего лишь «кэширующий сайт»). , Однако после того, как я установил домен источника (myblog.com) и поведение (/ blog / * перенаправляет все на пользовательский источник myblog.com), я все равно получаю ошибку 404, и он использует мой javascript для перенаправления. Возможно ли, что перенаправление переопределено ошибкой?

Ваш ответ на вопрос