Re: fastcgi keep conn on и fastcgi finish request() в PHP
S.A.N
nginx-forum at nginx.us
Mon Feb 17 18:21:03 UTC 2014
> > Лог ошибки Nginx
> > [error] 7945#0: *5 upstream sent unexpected FastCGI record: 3 while
> reading
> > response header from upstream ...
>
> Вы прислали FCGI_END_REQUEST, ничего не вернув клиенту, о чём
> nginx и плачет. Единственное, что он в данном случае может
> сделать - это вернуть клиенту ошибку.
Это происходит только при выключенном fastcgi_keep_conn и keepalive, если их
выключить Nginx отлично отдает 200 статус без ошибок.
> > В upstreem кеше 8 конектов, ошибка появляется когда Nginx ждет от
> PHP-FPM
> > ответа в конекте который ещё не освободился, по моей логике PHP-FPM
> должен
> > ответить Nginx когда скрипт завершит работу (sleep(10)) но этого не
> > происходит и Nginx отдает 502 ошибку, судя по всему PHP-FPM после
> > освобождения конекта не смог обработать следующий запрос от Nginx в
> этом
> > конекте, подозреваю что функции fastcgi_finish_request() не
> рассчитана на
> > повторное использования конекта.
> >
> > Или я что-то делаю не правильно?
>
> После того, как запрос завершён с помощью FCGI_END_REQUEST (==
> fastcgi_finish_request() в php), вы уже не сможете ничего вернуть
> клиенту.
>
> Так имеет смысл делать, когда вы хотите вернуть ответ, а потом
> сделать ещё какую-то работу.
Да именно так все и задумано, но Nginx отдает 502 ошибку.
>Мультиплексировать так несколько запросов в одном процессе php - не
получится.
Если я правильно понял, использовать keepalive конекта после
FCGI_END_REQUEST, не выйдет?
И есть только два варианта, отказаться от keepalive (без него эта схема
работает) или отказаться от fastcgi_finish_request (без него работает
keepalive)
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,247661,247668#msg-247668
Подробная информация о списке рассылки nginx-ru