$invalid_referer доступна в сочетании с директивой valid_referers и позволяет контролировать поступившие запросы по критерию реферера (то есть источника, откуда пришел запрос). Эта возможность помогает бороться с атаками прямого доступа к ресурсам (hotlinking), несанкционированным скачиванием файлов и другими видами злоупотреблений.Как работает $invalid_referer?
- Определение допустимых рефереров: Директива
valid_referersопределяет, какие источники запросов считаются легитимными. Если запрос поступил с незаданного источника, переменная$invalid_refererпринимает значение true. - Проверка реферера: Используя оператор
if, вы можете проверить переменную$invalid_referer. Если она истинна, запрос отклоняется или перенаправляется особым образом.
Пример использования
Предположим, вы хотите запретить прямую загрузку изображений с вашего сайта для посторонних сайтов. Вы можете настроить следующий блок в конфигурации Nginx:
location ~* \.(jpg|jpeg|gif|png)$ {
valid_referers none blocked server_names example.com www.example.com;
if ($invalid_referer) {
return 403; # Заблокировать запрос с чужих сайтов
}
}Логика работы:
- Любой запрос на изображение проверяется на принадлежность к разрешенным источникам (доменам).
- Если запрос пришел с неподтвержденного домена, Nginx возвращает статус 403 (Forbidden).
Режимы директивы
valid_referers:
none: Запрещает запросы без реферера (прямой ввод URL).blocked: Запрещает запросы с забаненными IP или странными реферерами.server_names: Включает список доменов, которые допускаются как источники запросов.
Полезные советы по использованию $invalid_referer
- Остерегайтесь ловушек IF: Обратите внимание, что конструкция
if ($invalid_referer)подвержена известным проблемам при неправильной настройке. Всегда тестируйте вашу конфигурацию перед внедрением. - Мониторинг: Ведите мониторинг запросов с недействительной ссылкой. Это даст представление о том, насколько успешна защита и нужны ли дополнительные меры.
- Администрирование исключений: Если нужно разрешить доступ отдельным пользователям или сервисам, можно добавить исключения в список разрешенных рефереров.
Переменная
$invalid_referer является мощным инструментом в борьбе с хотлинком и прочими нарушениями безопасности. Грамотная настройка рефереров и своевременная обработка недопустимых запросов поможет защитить ваши ресурсы и снизить нагрузку на сервер.