Четверг, 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

Директива задаёт размер временного пула.

Написано в: 16:57 | 0 комментариев | | теги: , , , , | постоянная ссылка |
Добавить пост в:   Delicious Reddit Slashdot Digg Technorati Google


Последние комментарии

Комментарии

К этой публикации комментариев нет

Форма комментирования для «nginx: multi map»

Обязательное поле. Не больше 30 символов.

Обязательное поле