Модуль ngx_http_referer_module

Пример конфигурации
Директивы
     referer_hash_bucket_size
     referer_hash_max_size
     valid_referers
Встроенные переменные

Модуль ngx_http_referer_module позволяет блокировать доступ к сайту для запросов с неверными значениями поля “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 64;
Контекст: server, location

Эта директива появилась в версии 1.0.5.

Задаёт размер корзины хэш-таблиц со значениями “Referer”. Подробнее настройка хэш-таблиц обсуждается в отдельном документе.

Синтаксис: referer_hash_max_size размер;
Умолчание:
referer_hash_max_size 2048;
Контекст: server, location

Эта директива появилась в версии 1.0.5.

Задаёт максимальный размер хэш-таблиц со значениями “Referer”. Подробнее настройка хэш-таблиц обсуждается в отдельном документе.

Синтаксис: 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”.