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

S.A.N nginx-forum at nginx.us
Sat Feb 15 20:36:18 UTC 2014


При включенном 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 ...

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

В upstreem кеше 8 конектов, ошибка появляется когда Nginx ждет от PHP-FPM
ответа в конекте который ещё не освободился, по моей логике PHP-FPM должен
ответить Nginx когда скрипт завершит работу (sleep(10)) но этого не
происходит и Nginx отдает 502 ошибку, судя по всему PHP-FPM после
освобождения конекта не смог обработать следующий запрос от Nginx в этом
конекте, подозреваю что функции fastcgi_finish_request() не рассчитана на
повторное использования конекта.

Или я что-то делаю не правильно?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,247596,247596#msg-247596



Подробная информация о списке рассылки nginx-ru