Welcome! Log In Create A New Profile

Advanced

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

Maxim Dounin
February 17, 2014 09:40AM
Hello!

On Sat, Feb 15, 2014 at 03:36:18PM -0500, S.A.N wrote:

> При включенном keepalive в upstream к FastCGI бекенду на PHP, появляются
> ошибки 502, проблему нашли и воспроизводится она таким образом.
> РНР скрипт, медленные операции выполняет в фон режиме после вызова функции
> fastcgi_finish_request(), тестовый скрипт
>
> <?php
>
> ignore_user_abort();
> fastcgi_finish_request();
> sleep(10);
>
> ?>
>
> конфигурация Nginx
>
> upstream fpm
> {
> server 127.0.0.1:9000;
> keepalive 8;
> }
>
> server
> {
> ......
> fastcgi_keep_conn on;
> fastcgi_param SCRIPT_NAME /index.php;
> fastcgi_pass fpm;
> ......
> }
>
> Лог ошибки Nginx
> [error] 7945#0: *5 upstream sent unexpected FastCGI record: 3 while reading
> response header from upstream ...

Вы прислали FCGI_END_REQUEST, ничего не вернув клиенту, о чём
nginx и плачет. Единственное, что он в данном случае может
сделать - это вернуть клиенту ошибку.

> Лог ошибок PHP-FPM пустой.

Ожидаемо, т.к. со стороны php поведение - ровно то, которое
запросил программист.

> В 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), вы уже не сможете ничего вернуть
клиенту.

Так имеет смысл делать, когда вы хотите вернуть ответ, а потом
сделать ещё какую-то работу. Мультиплексировать так несколько
запросов в одном процессе 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: 133
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 500 on July 15, 2024
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready