Четверг, 23 Июль 2009
nginx: multi map
В nginx есть удобная деректива map. Предлагаю общественности патч, который расширяет ее функционал.
Первое, что добавляется это деректива map_pool_size
для изменения размера временного пула. Второе, это возможность использовать вместо ключа не просто переменную, а строку, состоящую из любого количества переменных и просто констант. Треться — делать ассоциацию ключа не с одним значением, а с несколькими. Т.е. после наложения этого патча можно будет писать так:
map $http_host $real_domain $id{
hostnames;
default "hosting.ru" "0";
.motto.ru "auto.ru" "2";
.auto.ru "auto.ru" "3";
.kids.ru "kids.ru" "4";
.meet.ru "meet.ru" "5";
.figvam.ru "meet.ru" "6";
}
Да, количество переменных не ограничено.
Ну и последнее решение проблемы с кешированием в map.
Описание директив
За основу было взято описания Игоря Сысоева, которое было дополнено с учетом изменений которые вносит мой патч
syntax: map “ключ” $переменная1 $переменная2 … { … }
default: нет
context: http
Директива создаёт переменные ($переменная1, $переменная2 и т.д.), значение которой зависит от значения ключа (ключ это минимум одна переменная или больше и какие-то константные строки). Директива поддерживает три специальных параметра:
default
— задаёт значение для второй переменной, если значение первой переменной не найдено.hostname
— указывает, что качестве исходных значений можно использовать маску для первой или последней части имени хоста.
Например:
example.* 1;
*.example.com 1;
Вместо двух записей
example.com 1;
*.example.com 1;
можно использовать одну
.example.com 1;
include
— включает файл со значениями. Включений может быть несколько.
syntax: map_hash_max_size число
default: map_hash_max_size 2048
context: http
Директива задаёт максимальный размер хэш-таблиц для переменных map. Подробнее смотри в описании настройки хэшей.
syntax: map_hash_bucket_size число
default: map_hash_bucket_size 32/64/128
context: http
Директива задаёт размер корзины в хэш-таблицах для переменных map. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее смотри в описании настройки хэшей.
syntax: map_pool_size число
default: map_pool_size 16384
context: http
Директива задаёт размер временного пула.
Комментарии
Форма комментирования для «nginx: multi map»