Hello! On Mon, Feb 17, 2014 at 01:21:03PM -0500, S.A.N wrote:
> > > Лог ошибки 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 статус без ошибок. ENOPARSE. > > > В 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) При правильной работы со стороны php - ничего непоправимого происходить не должно. Скорее всего - будет некоторое время тормозить следующий запрос в соответствующем соединении (ну и может отвалится по таймауту, если работа после предыдущего запрос продолжается долго). Что у вас на самом деле происходит - надо смотреть на реальном коде, и с каким-то более разумным debug'ом. Ну и да, если проблема действительно есть, а не является следствием неправильного php-кода - то скорее всего она в php. -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
