When nginx is both static server and load balancer I keep upstream keepalive on and size worker_connections for client plus upstream sockets, not just peak RPS. least_conn beats round-robin when backends have uneven request cost. After changes I check error_log for connect() failed vs upstream timed out so I know whether to fix a dead peer or raise proxy_read_timeout.