I found a bug in the request finalization on linux:
If the server has a keep-alive set to 0 and the client sends pipelined
requests which exeeds client_header_buffer_size, nginx closes the
connection and linux sends a TCP RST since there is still data in
the TCP buffer of the kernel. This results in an incomplete transfer on
the client site.
One possible solution would be to allow pipelined request even if
keep-alive is set to zero. Another one would be to wait until the kernel
receives the ACK for all pending data in the send buffer.