Nginx Map Directive Generator
Сгенерировать блок map по списку пар ключ-значение.
Как это работает
Вопрос как использовать map в nginx конфиге возникает, когда нужно превратить одну переменную во множество вариантов другой без цепочки из десятка условных if блоков, которые в nginx и так считаются признаком дурного тона. Nginx map directive generator online собирает готовый блок map по списку пар ключ значение.
Директива map берет значение одной переменной, например заголовок или часть URL, и по таблице соответствий сопоставляет ему значение новой переменной, это работает быстрее и чище, чем множественные проверки через if, особенно когда вариантов много, как например разные CORS домены или разные upstream по имени хоста.
Полезно применять для маршрутизации запросов по поддоменам на разные backend, для условного включения функций по заголовку User-Agent, или для любой другой задачи, где нужно превратить одно значение в другое по заранее известной таблице соответствий без нагромождения условной логики в конфиге.
Частые вопросы
На каком уровне конфига nginx должна быть объявлена директива map?
Map объявляется только на уровне http, вне блока server, это ограничение самого nginx, зато использовать получившуюся переменную можно уже внутри любого server или location блока.
Что означает default в блоке map?
Это значение переменной для случаев, когда исходное значение не совпало ни с одним из явно перечисленных вариантов в таблице соответствий, без default в такой ситуации переменная останется пустой.
Можно ли использовать регулярные выражения в качестве ключей map?
Да, map поддерживает регулярные выражения в качестве условий слева, это делает конструкцию еще мощнее обычных if проверок для сложных паттернов сопоставления.
Быстрее ли map, чем эквивалентная цепочка if внутри location?
Да, map вычисляется один раз при обработке запроса и не требует последовательной проверки условий одно за другим, что особенно заметно при большом количестве вариантов сопоставления.