@Brock N Any other "gotchas" or things to be worried about?
Brock - I have only encountered two issues in load balancing (this is regarding stand-alone apps):
1) maintaining session
This is the most obvious. You need to use some method to keep requests from the client routing to the same instance of the app in the load balancing pool. Using nginx I found the easiest way as IP hashing. But if you have a client behind NAT (like a network of users in the same office) they all can look like they are coming from the same IP - which defeats the load balancing. So I switched to haproxy which allows very easy cookie injection. I found it best to create a separate cookie just for routing with the load balancer and inject it into the header. It works perfectly and seamlessly.
2) keeping connections open
The load balancer may not keep connections open between specific instances of the app and the end user at the same time-out values as the app itself. This can also cause the session to terminate (You get the "application went offline" message). You have to play around with the values to keep things working.
With the two above issues addressed I have not run into any other issues so far. My web apps are written clients in-house use, so the NAT/IP address issue was a deal-breaker for me with nginx. That got me to try haproxy. But once I tried it, I was hooked.
Hope this helps.