Re: Права при запуске перлового обработчика и еще кое что

Denis F. Latypoff denis at gostats.ru
Mon Apr 14 14:16:14 MSD 2008


Hello Павел,

Monday, April 14, 2008, 4:30:39 PM, you wrote:

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

> package nginxhandler;
> use strict;
> use warnings;
> use nginx;

`echo \`whoami\` >>> /tmp/whoami `;

> sub handler {
>     my $r = shift;
>     $r->send_http_header("text/html");
>     $r->print(`whoami`);
>     return HTTP_OK;
> }

> Это дает "root" в файле /tmp/whoami и "nobody" на выходе из nginx'a.
> Это нормальное поведение? Можно как-нибудь сделать так, чтобы загрузка
> была все-таки из под nobody?

> И второе:
> Стало интересно можно ли запинать HTML::Mason для работы с nginx.
> Оказалось, что заводится с полпинка, но возник следующий вопрос.
> по умолчанию модуль выводит все, что он нагенерил в STDOUT, откуда
> nginx'ом отправляется то ли в /dev/null, то ли еще куда-то.
> Но если задать мейсону праметр out_method, то он вместо print делает
> вызов данной функции.

> Есть у меня вот такой обработчик:

> package nginxhandler;
> use nginx;

> ...
> our $r; # XXX !!! чтобы $r было видно в out_method
> my $mason = new HTML::Mason::Interp(
>                                         comp_root => $Config::html,
>                                         data_dir => $Config::var .
> '/mason_data/',
>                                         use_strict => 1,
>                                         out_method => sub {
>                                                         $r->print(@_);
>                                         },
> );


> sub handler {
>         $r = shift;
>         $mason->exec(....);
>         return HTTP_OK;
> }


> Собственно вопрос. Может ли случиться такое: Мейсон надолго
> задумается(во всех рабочих процессах) на exec'е,

тогда все остальные подключенные соединения будут ждать Мейсона.

> приходит еще один запрос,

придет он только тогда, когда Мейсона отпустит.

> его подхватывает какой-нибудь рабочий процесс, успевает подменить $r своим
> объектом и, вдруг, первый процесс кончает работу и выплевывает большую кучу
> контента. Уйдет ли контент нужному клиенту или перемешается?



-- 
Best regards,
 Denis                            mailto:denis at gostats.ru






More information about the nginx-ru mailing list