Как разрешить обновление браузера при размещении приложения Angular 4 с BLOB-объектами Azure и прокси-функциями функций Azure
Я использовал angular-cli для создания своего приложения Angular.
Примечание. Я использую стратегию маршрутизации PathLocationStrategy, и из-за других ограничений я не могу использовать HashLocationStrategy.
Я загрузил все статические файлы в контейнер внешнего интерфейса в BLOB-объектах хранилища Azure. Приложение работает нормально, за исключением двух ограничений, с которыми я столкнулся:
- Пользователь должен ввести полный URL-адрес, а не только доменное имя (т.е. https://someblob.blob.core.windows.net/frontend/index.html)
- Когда пользователь нажимает обновление браузера, возвращается ошибка 404.
Используя функции прокси Azure и следующий файл proxies.json, мне удалось решить первое ограничение. Т.е. пользователь может получить доступ к приложению, просмотрев some-azure-function.azurewebsites.net. Но не второй.
Есть ли способ решить второе ограничение с помощью прокси-серверов функций Azure?
proxies.json:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"refresh": {
"matchCondition": {
"route": "/frontend/"
},
"backendUri": "https://someblob.blob.core.windows.net/frontend/index.html"
},
"allfiles": {
"matchCondition": {
"route": "/frontend/{*rest}"
},
"backendUri": "https://someblob.blob.core.windows.net/frontend/{rest}"
},
"root": {
"matchCondition": {
"route": "/"
},
"backendUri": "https://someblob.blob.core.windows.net/frontend/index.html"
}
}
}
1 ответ
Похоже, у вас возникла проблема с угловым кодом, добавляющим информацию о маршруте за URL-адресом, и хранилище больших двоичных объектов не может обслуживать этот файл.
Ваш средний прокси-сервер добавит весь текст URL в запрос к хранилищу BLOB-объектов, поэтому запрос https://myfunctionapp.azurewebsites.net/frontend/index.html/foo/bar' will send a request to blob storage as
https://someblob.blob.core.windows.net/frontent/index.html/foo/bar`
Обновите ваш средний прокси до внутреннего Uri https://someblob.blob.core.windows.net/frontent/index.html
и каждую страницу перенаправлять обратно на домашнюю страницу, или изменить условие соответствия, чтобы проанализировать дополнительную информацию.
"route": "https://someblob.blob.core.windows.net/frontend/frontend/{page}/{*rest}"
захватит имя страницы в {page}