This article is specifically about the “Classic Load Balancer” which is the only ELB that existed at the time of its writing. I do not know if the Application Load Balancer has the same model.
We had the same experience. It took a couple of rounds before they figured out what we where talking about. They might also know it as “connection warming”. If you want to be sure that this is your problem you can use tcpdump to record a session. If you see connection, then nothing for say 60 seconds, then data then this is your issue.
The problem with timeouts is that you don’t know when the timeout happens on the ELB’s session since it doesn’t follow the normal flow. Basically ELB timeouts cover the time between client and ELB, and the nginx timeouts cover the time between ELB and nginx. In theory its safe to set your nginx timeout to something much larger, say 300 seconds, since the ELB controls the timeout to the client. This allows the connection to nginx to sit idle for far longer, but the ELB will close it if its a client connection so you should be relatively safe from user shenanigans.