Re[2]: set на уровне http
Михаил Монашёв
postmaster at softsearch.ru
Sat Aug 10 19:43:31 UTC 2013
Здравствуйте, Валентин.
>> set на уровне http был бы очень удобен порой. Обходить это через
>> map 1 $var {
>> default "value";
>> }
>> неудобно.
> http://nginx.org/en/docs/faq/variables_in_config.html
Признаюсь, что не въехал в ответ по ссылке. Все слова знакомые, а
собранные вместе смысл никакой в моей голове не приобретают. Тупею,
видимо. :-)
Опишу задачу. Мне надо было как-то писать в аксес-лог кэш-зону, чтобы
потом по логам считать эффективность каждой кэш-зоны. Встроенную
переменную я не знаю, поэтому решил создать переменную через set. Там,
где запросы проксируются, я присваивал через set соответствующей
переменной значение, равное имени кэшзоны. Но не все запросы
проксируются и в логе вместо значения переменной пишется пустая
строка, что неудобно для парсинга лога. Брать переменную в кавычки
тоже неудобно.
Для таких запросов я хотел присвоить этой переменной дефолтное
значение "-". Писать в каждом блоке server{} set или include посчитал
лишним и вставил в http{} вот такие строчки:
# set нельзя делать на уровне http, поэтому делаем присваивание через map
map 1 $cache_zone_for_logging {
default "-";
}
Т.е. я хотел использовать set для инициализации переменной, которая
потом может меняться.
На мой примитивный взгляд кажется нелогичным иметь иерархию блоков
конфига, иметь наследование с вышестоящих уровней иерархии и разрешать
set-у работать на уровне http{}.
--
С уважением,
Михаил mailto:postmaster at softsearch.ru
Подробная информация о списке рассылки nginx-ru