А если попробовать output buffering (в php.ini или ob_start)
повключать-повыключать - изменяется поведение?
On 3/28/06, AleXXX V. NovikoFF <alexxx@xxxxxxxxx> wrote:
>
> Tue, 28 Mar 2006 21:34:43 +0600
> "AleXXX V. NovikoFF" <alexxx@xxxxxxxxx> писал(а):
>
> >
> > Tue, 28 Mar 2006 18:26:04 +0400 (MSD)
> > Igor Sysoev <is@xxxxxxxxxxxxx> писал(а):
> >
> > > On Tue, 28 Mar 2006, AleXXX V. NovikoFF wrote:
> > >
> > > > Tue, 28 Mar 2006 17:20:49 +0400 (MSD)
> > > > Igor Sysoev <is@xxxxxxxxxxxxx> писал(а):
> > > >
> > > >> On Tue, 28 Mar 2006, AleXXX V. NovikoFF wrote:
> > > >>
> > > >>> Mon, 27 Mar 2006 23:41:56 +0500
> > > >>> "AleXXX V. NovikoFF" <alexxx@xxxxxxxxx> писал(а):
> > > >>>
> > > >>>> Добрый день!
> > > >>>>
> > > >>>> Возникла проблема, на бэкэнде есть скрипт выполняющийся с опцией
> > > >>>> ignore_user_abort = true;
> > > >>>> когда он просто болтался на апаче, он работал до конца, даже если
> > > >>>> юзер
> > > >>>> нажимал в броузере "Стоп" ну или просто связь рвалась, или таймаут
> > > >>>> наступал...
> > > >>>> Тот же скрипт висит на бэкэнде через nginx - он перестал выполняться
> > > >>>> до
> > > >>>> конца, при одном из условий он просто прибивается... :(
> > > >>>>
> > > >>>> Как бы такого избежать?
> > > >>>>
> > > >>>> Скрипт ничего не выводит, просто через какое-то время делает HTTP/1.0
> > > >>>> 302 Moved и Location.
> > > >>>> Пробовал выводить что-то - тоже самое.
> > > >>>> Вот так прицеплен к нему прокси:
> > > >>>>
> > > >>>> location ^~ /script/ {
> > > >>>> proxy_pass http://127.0.0.1;
> > > >>>>
> > > >>>> proxy_connect_timeout 300;
> > > >>>> proxy_send_timeout 300;
> > > >>>> proxy_read_timeout 300;
> > > >>>>
> > > >>>> proxy_buffer_size 1k;
> > > >>>> proxy_buffers 4 32k;
> > > >>>> proxy_temp_file_write_size 256k;
> > > >>>>
> > > >>>> proxy_set_header Host $host;
> > > >>>> proxy_set_header X-Real-IP $remote_addr;
> > > >>>> }
> > > >>>>
> > > >>>>
> > > >>>> Может я чего-то не так делаю?
> > > >>>>
> > > >>>
> > > >>> и тишина, и мертвые с косами.... :-)
> > > >>
> > > >> Если клиент закрыл соединение, то nginx тоже закрывает соединение с
> > > >> бэкендом.
> > > >> Это легко сделать настраиваемым, нужно только придумать название
> > > >> директиве
> > > >>
> > > >> proxy_ignore_client_abort on|off ?
> > > >>
> > > >
> > > > вполне бы подошло....но все же сомнение.... т.е. при потере связи с
> > > > клиентом nginx закрывает соединение с бэкэндом нормальным способом, что
> > > > тот думает, что соединение завершилось нормально, так чтоли?
> > >
> > > Да, nginx просто закрывает соединение.
> > >
> >
> > тогда такая опция бы пригодилась, в идеале с настройкой для location
>
> > ну и все-таки таймаут чтобы на нее действовал,
> > какой нить из этих:
> >
> > > >>>> proxy_send_timeout 300;
> > > >>>> proxy_read_timeout 300;
> >
> > ну или свой какой-то...
> > а то мало ли что там случилось, повесится так куча таких висяков...
>
> хотя нет, таймаут не нужен, он есть внутри скрипта
>
> кстати вот такой еще пример:
>
> на бэкэнде скрипт на пхп:
>
> <?
> set_time_limit(40);
> ignore_user_abort(true);
> sleep(31);
> mail("alexxx@xxxxxxxxx", "test", date("d-m-Y H:i:s"));
> ?>
>
> таймаут у nginx прокси стоит 300 сек
> однако вижу баг(?): через секунд 10 выдает ошибку 502
> email не приходит, ибо скрипт прибивается (вот тлько не должен бы!)
> 10 секунд у меня send_timeout
>
> Когда заставляю скрипт сперва вывести *много* текста в броузер (видимо
> размер буфера прокси) - то текст выводится и все срабатывает...
>
>
> --
> AleXXX V. NovikoFF <alexxx@xxxxxxxxx>
>
>
>
--
Alexey Polyakov