Модуль 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». Поиск совпадения производится без учета регистра символов.

Параметры могут быть следующие:

none

поле «Referer» в заголовке запроса отсутствует;

blocked

поле «Referer» в заголовке запроса присутствует, но его значение удалено межсетевым экраном (firewall) или прокси-сервером; к таким значениям относятся строки, не начинающиеся на «http://» или «https://»;

server_names

в поле «Referer» заголовка запроса указано одно из имен сервера;

произвольная строка

задает имя сервера и необязательное начало URI. В начале или конце имени сервера может быть «*». При проверке порт сервера в поле «Referer» игнорируется;

регулярное выражение

в начале должен быть символ «~». Необходимо учитывать, что на совпадение с выражением будет проверяться текст, начинающийся после «http://» или «https://».

Пример:

valid_referers none blocked server_names
               *.example.com example.* www.example.org/galleries/
               ~\.google\.;

Встроенные переменные#

$invalid_referer#

Пустая строка, если значение поля «Referer» заголовка запроса считается правильным, иначе «1».