aws apigateway cloudfront expressjs приложение всегда отображает URL-адрес api-шлюза
Это скорее технический вопрос, чем что-либо связанное с кодом. у меня есть expressjs
приложение работает на api-gateway
используя aws-serverless-express, который позволяет портировать expressjs
приложение с минимальными изменениями на api-gateway
, Но поскольку APIG генерирует для вас URL-адрес для каждого развертывания API, в котором указан идентификатор API, это не подходит для клиентов. Итак, я настроил cloudfront
Распределение, указывающее на URL APIG.
Однако, когда я запускаю приложение, URL-адрес, отображаемый в браузере, не тот, который был создан в облачном фронте (хотя я использую этот URL-адрес для перехода в приложение), а созданный APIG.
Я знаю, что в APIG есть возможность установить собственное доменное имя, и что после некоторых исследований APIG настраивает Cloudfront Distribution в фоновом режиме, но поскольку я не был одним из них, настраивал службу DNS и у меня не было разрешений чтобы изменить эти параметры для этой конкретной роли / региона в aws, было интересно, заключается ли проблема в том, что настраиваемый URL-адрес не был настроен с помощью параметров APIG?
3 ответа
Нашел правильный ответ здесь в другом ТАКом вопросе!
По сути пришлось изменить несколько настроек в облачном фронте.
Проверил, что "Политика протокола просмотра" в моем дистрибутиве CloudFront была установлена на "Перенаправить HTTP на HTTPS" или "Только HTTPS" и установила "Политика протокола источника" на "Только HTTPS".
Это, казалось, решило проблему для меня.
Если вы введете правильный URL в адресную строку браузера и нажмете ENTER, то эта страница отобразится. URL в адресной строке браузера может измениться, если сервер отправит код состояния перенаправления (301, 302, 307 и т. Д.).
Чтобы устранить это, откройте веб-инспектор в своем браузере, выберите вкладку "Сеть" и следуйте HTTP-запросам. Если вы видите состояние перенаправления, посмотрите в заголовки, чтобы узнать, какая система отправила его.
РЕДАКТИРОВАТЬ: API-шлюз отправляет 301 для перенаправления на HTTPS, если к нему обращается CloudFront через HTTP. Это, кажется, проблема здесь. Как указано в другом ответе, принудительное решение CloudFront для доступа к API-шлюзу через HTTPS-только устраняет эту проблему.
Я бы посоветовал не устанавливать распределение CF, указывающее на конечную точку вашего шлюза API. API Gateway уже включает дистрибутив CF. Если у вас уже есть доменное имя и сертификат, вы можете легко импортировать его в API-шлюз напрямую, используя функцию "Пользовательское доменное имя": http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html