it-swarm.com.ru

Azure CDN с Verizon - переписывание URL для постоянной загрузки index.html


Контекст


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

Как описано в следующем разделе, в настоящее время мое приложение Angular развернуто в учетной записи хранения , которая имеет одну контейнер BLOB-объектов с именем cdn

enter image description here

В корне этого контейнера больших двоичных объектов вся папка dist из моего angular проект был скопирован через мою настройку CI.

enter image description here

Профиль CDN также был настроен, чтобы указывать на Origin-path с именем /cdn

enter image description here


Проблема


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

  1. Я хотел бы перенаправить весь входящий трафик из моего приложения Angular в файл index.html. Это для того, чтобы удовлетворить маршрутизация для Angular .

    Input url with the expected output

  2. Кроме того, я хотел бы разрешить любой запрос статических файлов (например, изображений) без какой-либо конкретной перезаписи URL.

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

В настоящее время я использую механизм правил в Azure CDN из Verizon. ,.

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

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

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

Я обычно получал один из следующих результатов:

  • Домен верхнего уровня https://myFancyWebsite.azureedge.net не переписал бы URL в index.html, и я получил бы ошибку http 404
  • Домен верхнего уровня будет перенаправлен на index.html, но перестанет работать, как только я добавлю URL-адрес https://myFancyWebsite.azureedge.net/login/callback - еще раз http http: 404, как только я начну использовать /login/callback
  • Домен верхнего уровня переписал бы URL-адрес на что-то вроде https://myFancyWebsite.azureedge.net/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn .... в HTTP-ошибке 431

Официальный документация от Microsoft также не помог в моем случае.

Я уверен, что я не первый, кто развертывает приложение Angular в учетной записи хранения, и кто-то сталкивался с теми же проблемами, что и я.

Я благодарен за любую информацию, которая указывает мне верное направление, потому что в данный момент я определенно думаю о том, чтобы отойти от развертывания всей учетной записи хранения.


Обновление 1


Со следующим шаблоном source((?:[^\?]*/)?)($|\?.*), который также упоминался здесь в article , я могу обработать по крайней мере перезапись домена верхнего уровня в файл index.html.

К сожалению, мне все еще нужен дополнительный шаблон для перенаправления с https://myFancyWebsite.azureedge.net/login/callback на https://myFancyWebsite.azureedge.net/index.html


Обновление 2


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

https://regex101.com/r/KK0jCN/2


Обновление 3


Мы пишем 3025 год, и я до сих пор не понимаю, почему, например, следующий шаблон не обрабатывает перезапись URL верхнего домена.

https://regex101.com/r/KK0jCN/25

6
HansMusterWhatElse
  • Добавить новое правило с условием Если всегда
  • Вам нужно будет добавить новую функцию для каждой конечной точки.
  • Для шаблона введите [^?.]*(\?.*)?$. Этот шаблон перехватывает URL-пути с ., но не имеет значения, находится ли он в строке запроса.
  • В качестве пути введите Origin_path/document.ext. Это сложная часть. Путь относительно корня происхождения. Например, если исходный путь вашей конечной точки CDN равен /Origin_path и вы хотите перенаправить на index.html, вы должны ввести Origin_path/index.html. Это всегда будет иметь место, если ваш CDN защищен учетной записью хранилища Azure, а источник указывает на контейнер.
  • Нажмите кнопку Добавить, чтобы добавить свое правило, подождите N часов, и все готово.
8
Justin Gould

По вашему требованию я проверил эту проблему на моей стороне. В моем тесте вы можете попробовать использовать следующее правило перезаписи URL:

Исходный шаблон: (http[s]?://[^\?/#]+)(/(?!images)(?!scripts)[^\?#]*)?($|[\?#].*)

Шаблон назначения: $1/index.html$3

Примечание: Для правильной загрузки других файлов (.ico, .txt, .js, .css и т.д.) Необходимо переместить их в новые виртуальные каталоги. вместо корня вашего контейнера BLOB-объектов. Например, вы можете переместить файлы изображений в cdn\images и переместить файлы JavaScript в cdn\scripts, тогда регулярное выражение будет игнорировать связанные виртуальные папки.

Кроме того, вы можете использовать Azure Web App для размещения статического веб-сайта и выбрать уровень бесплатной цены или уровень общей стоимости, который будет стоить вам 9,49 долл. США в месяц за экземпляр. Подробности вы можете следить Калькулятор цен .


UPDATE:

Основываясь на ответе Джастина, я проверил эту проблему и обнаружил, что для типа источника хранения BLOB-объектов Source и Destination в URL Rewrite говорят о запросе к конечной точке хранилища BLOB-объектов. Поэтому нам нужно установить регулярное выражение для пути запроса и строки запроса для конечной точки BLOB-объекта.

Джастин Гулд предоставил ответ для перезаписи всего в cdn/index.html. Основываясь на вашем сценарии, я проверил свое правило, и оно может работать на моей стороне.

enter image description here

TEST:

enter image description here

enter image description here

1
Bruce Chen