On 18.08.2013 23:49, Михаил Монашёв wrote:
Опишу задачу. Мне надо было как-то писать в аксес-лог кэш-зону, чтобы потом по логам считать эффективность каждой кэш-зоны. Встроенную переменную я не знаю, поэтому решил создать переменную через set. Там, где запросы проксируются, я присваивал через set соответствующей переменной значение, равное имени кэшзоны. Но не все запросы проксируются и в логе вместо значения переменной пишется пустая строка, что неудобно для парсинга лога. Брать переменную в кавычки тоже неудобно.
для этих целей - проще всего было бы создать встроенную переменную с дефолтовым значением "-". или, если значение какой-то (любой) переменной не определено - писать в лог ее значение в виде "".
Для таких запросов я хотел присвоить этой переменной дефолтное значение "-". Писать в каждом блоке server{} set или include посчитал лишним и вставил в http{} вот такие строчки: # set нельзя делать на уровне http, поэтому делаем присваивание через map map 1 $cache_zone_for_logging { default "-"; } Т.е. я хотел использовать set для инициализации переменной, которая потом может меняться. На мой примитивный взгляд кажется нелогичным иметь иерархию блоков конфига, иметь наследование с вышестоящих уровней иерархии и разрешать set-у работать на уровне http{}.
если "присваивание через map" работает - то это нормальный workaround. то есть, сейчас это ситуация "нельзя, но если очень хочется, то можно".
Вводить директиву set на уровне http с совершенно другой семантикой - это не очень хорошая идея.
Зачем другая семантика. Оставить всё как есть, только дать возможность писать в конфиге set на уровне http{}. Это удобно, логично, упрощает конфиг, избавляет от копипасты.
если будут включены set на уровне http - их активно начнут использовать "...as macros for making parts of configuration work as templates". -- Best regards, Gena _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru