High # of sockets in TIME-WAIT state, server unresponsive at load

Solution 1:

In the end, I did more research and read this very excellent guide on scaling Node apps behind an nginx proxy.

The major difference came when I added the keepalive parameter to the upstream block in nginx. As it turns out, nginx workers don't cache incoming connections and re-use them, causing many thousands of new connections to be created (esp. w/ socket.io handshakes and such)

@MichaelHampton's suggestion of using a unix domain socket would also resolve this quite well.