Maxim Dounin
February 18, 2014 07:34AM
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
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

fastcgi_keep_conn on и fastcgi_finish_request() в PHP

S.A.N February 15, 2014 03:36PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

Maxim Dounin February 17, 2014 09:40AM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

S.A.N February 17, 2014 01:21PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

Валентин Бартенев February 17, 2014 02:28PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

S.A.N February 17, 2014 04:29PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

Maxim Dounin February 18, 2014 07:34AM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

S.A.N February 20, 2014 08:27PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

Vladislavik January 18, 2019 01:12PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

Maxim Dounin January 18, 2019 05:30PM

Re: fastcgi keep conn on и fastcgi finish request() в PHP

S.A.N January 19, 2019 09:37AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 240
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready