У меня есть ELB, который я хочу поставить за CloudFront. Допустим, ELB - это example.us-east-1.elb.amazonaws.com. Он принимает только запросы с заголовком Host, установленным на www.example.com, который я теперь хочу разместить с помощью CloudFront. Можно ли указать CloudFront использовать это Host
заголовок? Когда я пытаюсь установить Host
заголовок в консоли AWS для CloudFront, я получаю сообщение об ошибке com.amazonaws.services.cloudfront.model.InvalidArgumentException: The parameter HeaderName : Host is not allowed. (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidArgument; Request ID: dead-beef-badc0ffee1)
.
Предположительно, если сервис на ELB отвечает только на www.example.com
то это имя хоста, которое вы собираетесь указывать на CloudFront - так что ваше решение простое: в настройках Cache Behavior внесите в белый список Host
заголовок для пересылки в источник.
В этой конфигурации CloudFront проходит через Host
заголовок, отправляемый браузером, который необходимо добавить в список альтернативных доменных имен в конфигурации дистрибутива. Запросы на dzzzexample.cloudfront.net
потерпит неудачу, потому что ваш источник их не поймет, но обычно это хорошо, потому что вы не хотите, чтобы поисковые системы индексировали ваш контент под доменным именем CDN.
Однако, возможно, это не ваш план. Если эта конфигурация не работает для вашего приложения, вам понадобится триггер Lambda @ Edge Origin Request, чтобы изменить Host
заголовок.
'use strict';
// force a specific Host header to be sent to the origin
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
request.headers.host[0].value = 'www.example.com';
return callback(null, request);
};
Обратите внимание, что Host
заголовок является неизменным в триггере запроса источника, если вы не настроите поведение кеша для внесения в белый список Host
заголовок, как описано выше. В этом случае вы добавляете в белый список Host
заголовок, установленный триггером Lambda @ Edge, а не заголовком из браузера, но конфигурация CloudFront такая же.
Вы не можете использовать Host
в конфигурации статических пользовательских исходных заголовков в CloudFront - это не поддерживаемая конфигурация. Лямбда-триггер имеет тот же эффект, что и параметр, если бы он был разрешен.