Re: Получение конфигурации

Anton Dutov anton.dutov на gmail.com
Ср Июн 30 22:34:19 MSD 2010


> Какого из ? (Их может быть много).
> На этой стадии доступна только глобальная конфигурация http.
> А что нужно сделать ?
Ну я взялся за реализацию то иди которую как то давно вам говорил о
возможности выполнения системных команд при запуске/остановке
виртуального хоста
server{
   ...
   onstart /path/to/some_fsgi_or_wsgi_app --param --pid /path/to/pidfile;
   onstop kill `cat /path/to/pidfile`;
   onstop rm -f /path/to/pidfile;
   ...
}

Примерно год назад я на скору руку накатал простейший модуль который
на стадии разбора создавал два массива команд(общие списки для всех
виртуальных хостов) один команды запуска - второй для остановки.
на стадии разбора директив - мой обработчик заполнял массивы значениями.
на стадии init_module осуществлял перебор массива команд запуска и
выполнял их через system();
на стадии exi_master осуществлял перебор массива команд остановки и
выполнял их через system();

я знал о проблеме что во время запуска nginx -t (тест конфига) не
выполняется обработчик exist_master, а значит при запуске теста
конфигурации контекст виртуальных серверов подымется а в конце теста
не опустится. на тот момент мне нужды в этом не было.

Сейчас решил все переписать.
Раньше у меня был было два глобальных массива, общие для всех вирт.
серверов, сейчас же решил сделать по научному
предварительно создаю и мержу через create/merge_srv_conf - заполняю
их командами.
далее в init_process нужно получить конфиги вирт. хостов и выполнить
команды запуска.

почему в init_procces? потому что он не выполняется при тесте
конфига(как и exit_master) а значит избавит от проблемы выполнения
команд во время теста конфигурации, но поскольку процессов может быть
более одного(и соотв. обработчик вызовется несколько раз) нужно
добавить флаг о том команды запуска уже выполнены.

init_module я взял для примера т.к. у него на входе такие же параметры
как и init_process.
Если как вы говорите на этих стадиях невозможно получить конфигурацию
вирт. хоста, то можно вернутся к глобальным(общим для всех вирт.
хостов) массивам.

существует ли возможность проверить(из модуля) что nginx запустился
именно в рабочем режиме?

возможны ли какие либо подводные камни вышеописанного метода?

P.S. извиняюсь за "многобукв".


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