Модуль http_referer
#
Позволяет блокировать доступ к сайту для запросов с неверными значениями поля «Referer» в заголовке. Следует иметь в виду, что подделать запрос с нужным значением поля «Referer» не составляет большого труда, поэтому цель использования данного модуля заключается не в стопроцентном блокировании подобных запросов, а в блокировании массового потока запросов, сделанных обычными браузерами. Нужно также учитывать, что обычные браузеры могут не передавать поле «Referer» даже для верных запросов.
Пример конфигурации#
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
if ($invalid_referer) {
return 403;
}
Директивы#
referer_hash_bucket_size#
- Синтаксис:
referer_hash_bucket_size
размер;- Умолчание:
referer_hash_bucket_size 64;
- Контекст:
server, location
Задаёт размер корзины хэш-таблиц со значениями «Referer». Подробнее настройка хэш-таблиц обсуждается отдельно.
referer_hash_max_size#
- Синтаксис:
referer_hash_max_size
размер;- Умолчание:
referer_hash_max_size 2048;
- Контекст:
server, location
Задаёт максимальный размер хэш-таблиц со значениями «Referer». Подробнее настройка хэш-таблиц обсуждается отдельно.
valid_referers#
- Синтаксис:
valid_referers
none | blocked | server_names | строка …;- Умолчание:
—
- Контекст:
server, location
Задаёт значения поля «Referer» заголовка запроса, при которых встроенная переменная $invalid_referer будет иметь пустую строку в качестве значения. В противном случае значение переменной равно «1». Поиск совпадения производится без учёта регистра символов.
Параметры могут быть следующие:
|
поле «Referer» в заголовке запроса отсутствует; |
|
поле «Referer» в заголовке запроса присутствует, но его значение удалено межсетевым экраном (firewall) или прокси-сервером; к таким значениям относятся строки, не начинающиеся на «http://» или «https://»; |
|
в поле «Referer» заголовка запроса указано одно из имён сервера; |
|
задаёт имя сервера и необязательное начало URI. В начале или конце имени сервера может быть «*». При проверке порт сервера в поле «Referer» игнорируется; |
|
в начале должен быть символ «~». Необходимо учитывать, что на совпадение с выражением будет проверяться текст, начинающийся после «http://» или «https://». |
Пример:
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
Встроенные переменные#
$invalid_referer
#
Пустая строка, если значение поля «Referer» заголовка запроса считается правильным, иначе «1».