Есть ли способ идентифицировать запросы, поступающие на пользовательский сервер происхождения из CloudFront?

Я использую CloudFront с пользовательским происхождением и хочу перенаправить некоторые запросы, поступающие в веб-приложение на CloudFront (клиенты используют прямые URL-адреса, которые нельзя изменить на URL-адреса на основе CloudFront). Чтобы обеспечить корректное обновление кеша на CloudFront, я не должен перенаправлять запросы, поступающие с самого CloudFront. Есть ли способ идентифицировать такие запросы на сервере происхождения?

Добавляет ли CloudFront любые пользовательские заголовки к запросам, отправленным на исходный сервер? Или есть ли другой надежный способ определить, что запросы поступают от CloudFront?

Ответ 1

да, вы можете идентифицировать запросы, поступающие на ваш исходный сервер с облачного интерфейса, путем проверки пользователя. пользовательский агент будет "Amazon CloudFront"

Ответ 2

Update

Avinash Bijja правильно указал (+1), что HTTP User-agent будет "Amazon CloudFront" для запросов, поступающих с серверов Amazon CloudFront. К сожалению, это, как представляется, явно не документировано, но неявно признано различными сообщениями на соответствующем форуме, см., Например, ответ команды AWS на User Agent String - перезаписывает ли CF-строку CF строку пользовательского агента?:

Вы правы. Поле User-Agent всегда заполняется как "Amazon CloudFront".

Однако, оказалось, что в настоящее время он не является полностью надежным, поскольку CloudFront отправляет пустой User-Agent в начало, если в запросе исходного клиента отсутствует:

Я могу подтвердить, что CloudFront не отправляет User-Agent в когда первоначальный клиент не отправляет User-Agent. У нас есть улучшений и исправлений для обработки User-Agent в нашем отставании, но нет даты выпуска в это время. Я отправил вам PM с подробной информацией.

Эти улучшения и исправления, по-видимому, пока не развернуты, по крайней мере, с 07 февраля 2013 года.Забастовкa >

Эти улучшения и исправления были выпущены по состоянию на 05 августа 2013 г. (спасибо webbiedave для обновления!).


Исходный ответ

Добавляет ли CloudFront любые пользовательские заголовки к запросам, отправленным в исходное сервер?

Можно было бы так подумать, но по крайней мере они, похоже, не документированы там, где я ожидал бы этого, а именно в Как CloudFront обрабатывает и переводит Запросы на свой собственный сервер происхождения. Если вы контролируете исходный сервер, вы можете просто проверить его журналы доступа HTTP, хотя?

Или существует ли другой надежный способ определить, что запросы от CloudFront?

Вам нужно будет сами оценить надежность, но IP-адрес, который CloudFront перенаправляет на исходный сервер, - это IP-адреса сервера CloudFront, а не IP-адрес конечного пользователя. - следовательно, вы можете ограничить доступ к опубликованным Amazon CloudFront Public IP Ranges; однако имейте в виду соответствующий отказ от ответственности:

IP-адреса CloudFront часто меняются, и мы не можем гарантировать предварительное уведомление об изменениях. В наилучшей форме мы предоставим список текущих адресов. Клиенты не должны использовать эти адреса для критически важных приложений и никогда не должен жестко кодировать их в DNS имена. [акцент мой]

Следовательно, вам нужно будет следить за этим форумом/сообщением, чтобы как можно скорее принять соответствующие изменения (если это ограничение приемлемо для вашего варианта использования в первую очередь).

Ответ 3

Обновление

Это старый вопрос, но мое обновление полезно для кого-то исследования или поиска нового решения.

Недавно AWS добавила новую функцию Origin Custom Headers. Вы можете установить заголовок с секретным значением и проверить его на своем исходном сервере веб-сервером или вашими приложениями.

введите описание изображения здесь

Ответ 5

Вероятно, это комментарий к ответу Резы, но я не могу этого сделать:).

Для полноты здесь ссылка на официальную документацию относительно Пересылка пользовательских заголовков, которая в настоящее время заявляет следующее.

Вы можете настроить CloudFront для включения настраиваемых заголовков всякий раз, когда он пересылает запрос по своему происхождению. Вы можете указать имена и значения пользовательских заголовков для каждого источника, как для пользовательского происхождения, так и для ведра Amazon S3. Пользовательские заголовки имеют множество применений, таких как:

Вы можете идентифицировать запросы, которые переадресовываются в пользовательское происхождение CloudFront. Это полезно, если вы хотите узнать, обошли ли пользователи CloudFront или используете ли вы несколько CDN, и вам нужна информация о том, какие запросы поступают с каждого CDN. (Если вы используете источник Amazon S3 и вы включаете ведение журнала доступа к серверу Amazon S3, журналы не содержат информацию заголовка.)