Nginx patch for unexpected FASTCGI_END_REQUEST on php keep_conn + fastcgi_finish_request
mdounin at mdounin.ru
Fri Jul 4 16:13:06 UTC 2014
On Fri, Jul 04, 2014 at 05:33:43PM +0400, Dmitry Saprykin wrote:
> Ok, quite clear. ) Just thought that in case of keepalive connection to
> FastCGI upstream we can process more than 1 request using one connect.
> Unexpected FCGI_END_REQUEST is received in following case:
> 1) Request 1 sent to backend, results received and sent to client
> 2) Request 2 sent to backend by nginx and is in queue because php is busy
> after fastcgi_finish_request() call
> 3) php finishes extra work after fastcgi_finish_request() call and sends
> 4) Nginx expects STDERR or STDOUT of request 2 but receives FCGI_END_REQUEST
> of request 1.
> If this situation is normal by design I will just not use keep_conn.
This situation isn't normal. It's a bug in php which sends
two FCGI_END_REQUEST records for a request - first one after
fastcgi_finish_request(), and another one once it finishes the
work. And this probably should be fixed - in php. There is
nothing to fix in nginx though.
More information about the nginx-devel