Некоторые ребята создают CloudFront CDN для прокси-сервера моего сайта, чтобы люди могли получить доступ к моему сайту, используя URL-адрес, например df03039lsls933.cloudfront.net
вместо того www.example.com
Как заблокировать это с помощью nginx?
В документе CloudFront сказано ...
Host: CloudFront sets the value to the domain name of the origin that is
associated with the requested object.
Поэтому я не могу заблокировать, используя host
заголовок, каков был бы другой подход?
(CloudFront - это просто пример, я хочу заблокировать все CDN с помощью аналогичного подхода)
Запросы CloudFront поступают от задокументированные диапазоны IP-адресов а также со строкой User-Agent, которая включает Amazon CloudFront
. Вы можете заблокировать и то, и другое, но поскольку диапазоны IP-адресов AWS довольно часто расширяются, я бы выбрал блок User-Agent.
Я ожидаю, что CDN добавит заголовки, которые можно использовать для их идентификации. Обычно они указывают реальный IP-адрес пользователя, а также некоторую другую информацию. Они также должны добавить или добавить X-Forwarded-For header,
который также должен содержать IP-адрес, на который они пересылаются.
Вы можете использовать наличие заголовка, чтобы инициировать перенаправление на ваш домен. Я бы не стал использовать X-Forwarded-For
заголовок для этого перенаправления, поскольку он может быть добавлен прокси на границах сети, а также CDN. Скорее всего, вам придется идентифицировать заголовок CDN в каждом конкретном случае.
Вам также следует связаться с CDN, если кто-то настроил ваш домен без вашего разрешения.
Я считаю, что вы можете использовать код javascript, чтобы проверить, что находится в location
. Эта проверка будет выполняться в браузере посетителя (а не на стороне сервера!). Этот подход очень похож на защита от открытия веб-страницы в iframe
.
Если такая ситуация обнаружена, вы можете перенаправить пользователя на действующий URL (или просто ничего не показывать).