Nginx patch for unexpected FASTCGI_END_REQUEST on php keep_conn + fastcgi_finish_request

Maxim Dounin mdounin at mdounin.ru
Fri Jul 4 16:13:06 UTC 2014


Hello!

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
> FCGI_END_REQUEST
> 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.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list