use

Pavel V. pavel2000 на ngs.ru
Пн Июл 11 21:01:45 MSD 2011


Здравствуйте, Gena.

Вы писали 11 июля 2011 г., 21:56:49:

> On 11.07.2011 17:12, Pavel V. wrote:

>> Желание / видение -  навеяное модулем mod_macro - это не то, что
>> обсуждается в треде. Если кто-то понимает это именно как mod_macro -
>> это не верно :-)

> http://www.cri.ensmp.fr/~coelho/mod_macro/

> - там есть достаточно интересные идеи, которые можно применить в nginx,
> только вместо html-like синтаксиса httpd использовать C-like синтаксис.

>> Хотелось бы иметь возможность описывать и использовать некий блок
>> директив конфигурации, _НО_: область видимости/применимости блока - server {}.

> почему такое ограничение - только внутри блока server?

Целенаправленное ограничение, чтобы описание блока директив было
"недалеко" от использования. Для прочего - использовать include.

Это предложение/ограничение также развивает ваше:

>2. если есть несколько сотен сайтов, то вполне логичным будет
>делать 1 сайт == 1 конфигурационный файл. использование include
>увеличивает количество конфигурационных файлов в несколько раз.

А также вопрос области применимости:

>следовательно - нельзя будет понять, изменения в этом файле
>затронут только один/несколько сайтов, или изменения в этом
>файле (например,  fastcgi_params) затронут многие сайты.

>block - по определению имеет локальную область действия,
>только в пределах того файла, где он описан, таким образом
>можно будет легко и спокойно менять содержимое этого блока,
>точно зная, какие именно части конфига он затронет
>и каким образом повлияет на поведение nginx.

но "чуть-чуть по-другому", не вводя лишней области видимости "текущий
файл".

Думаю, наличие дополнительной функции в виде директивы block,
доступной для объявления в любом месте конфига,  директивы use,
доступной для использования в любом месте, ниже чем директива block,
а также правила переопределения директив "директива, описанная ниже по конфигу
имеет более высокий приоритет", могло бы несколько изменить подход к
написанию конфигов (это было бы нечто, подобное конфигурированию
nagios).

Хотел было привести пример конфига, но пока фантазировал, реально
извратил его вложенностями и перекрытиями.
Думаю, что вовремя остановился :-)

Тут-то и возникает вопрос - всем ли действительно нужен perl-like подход
"есть много путей сделать это" при конфигурировании nginx, насколько
сильно вздрогнет рассылка решая головоломки "откуда какая директива сработала".

В случае глобального применения такого "блока", но без поддержки
параметров - особого смысла в директивах block/use вроде и  нет, можно
обходиться include. Когда внутри одного server {} требуется несколько групп почти
одинаковых директив, то выносить одну-две директивы в отдельный файл
для include - это неудобно и "увеличивает количество конфигурационных
файлов в несколько раз". На данный момент - приходится их
копировать из location в location.

C наличием директив block/use было бы удобнее, и /для моих задач/
достаточно возможности описывать блоки ровно внутри server{}. 


> тогда уж лучше реализовывать более общую директиву macro/use,
> с параметрами, как это сделано в апачевском модуле mod_macro.

> такая реализация новой директивы block будет очень сильно
> ограниченной по своим возможностям и поэтому мало полезной.


Да, пожалуй. В принципе, впоследствии, ограниченная директива block {}
может выродиться в mod_macro, по синтаксису

block backend_A ($varA, $varB) {
   ...
   block_backend_A_directives_that_uses_VARS;
   ...
}

location / {
          use backend_A $someVarForA 10;
}

И тогда подобного рода ( только внутри server {} )
ограничение применимости станет слишком сильным
ограничением.



-- 
С уважением,
 Pavel                          mailto:pavel2000 at ngs.ru




Подробная информация о списке рассылки nginx-ru