Предположим, у нас есть домен example.com , указывающий на экземпляр EC2, который разрешает трафик HTTPS и HTTP (перенаправление на HTTPS).
Этот экземпляр имеет экземпляр WordPress, работающий под Nginx.
У нас есть сертификат для домена example.com, а не самозаверяющий, сертификат Comodo.
Мы хотим добавить CloudFront к полному example.com , поэтому мы создаем CDN между пользователем и экземпляром EC2.
Мы могли бы использовать сайт example.com с / без CDN, имея две конечные точки, обслуживающие один и тот же контент ( example.com и origin.example.com ).
Без CDN:
Пользователь -> example.com -> Маршрут 53, указывающий напрямую на экземпляр IP (который имеет сертификат Comodo).
С CDN
Пользователь -> example.com -> Маршрут 53, указывающий на ALIAS CDN -> CDN pull из источника origin.example.com
origin.example.com будет иметь тот же контент, что и example.com (оба хоста Nginx указывают одинаково), и там мы должны разрешать только трафик из CDN, но это другая тема.
Для достижения этой цели мы создаем еще одну конечную точку, origin.example.com , с самозаверяющим сертификатом (с использованием давайте шифровать), размещаемую на том же сервере (тот же IP-адрес).
Идея состоит в том, чтобы отправить трафик с CDN на origin.example.com и оттуда извлечь контент.
Этот CDN имеет собственный example.com SSL-сертификат, сгенерированный Amazon и имеющий в качестве источника origin.example.com . Он также содержит заголовок хоста в белом списке и добавлен CNAME origin.example.com.
Все работает как положено. Если вы посещаете example.com, вы получаете контент из CDN.
Проблема? Если вы проверите журналы экземпляров (бот example.com и origin.example.com установлены в одном и том же экземпляре EC2), CDN НЕ вызывает origin.example. com , как и следовало ожидать, он вызывает ВСЕГДА example.com . Как это возможно?
Я установил журналы для CloudFront, и в этом журналы выглядят так:
2019-01-10 15:35:47 MAD50 27633 83.59.32.239 GET xxxxxx.cloudfront.net / mycontent / 200 https://example.com/lalala - - Мисс 5о… nX1hEbw == example.com https 566 0,140 - TLSv1 .2 ECDHE-RSA-AES128-GCM-SHA256 Мисс HTTP / 2.0 - -
Я думаю, это связано с полем белого списка Host.
Итак, похоже, CloudFront отправляет запрос origin.example.com , но заголовок Host установлен на example.com . Таким образом, Nginx каким-то образом анализирует значение в виртуальном хосте example.com (как показано в журналах, где видно, что трафик поступает из Amazon CloudFront). Что здесь не так?
Как CloudFront выполняет соединение?
Чего мне не хватает?
Спасибо!