We have a web application which runs on a cloud of webservers. In the evening the web application is used mostly from our local office which uses a NAT to connect several machines to the internet. Requests to the webapp go from the client PC's through the NAT, over the internet, through a load balancer and afterwards to a node in the cloud. The load balancer uses Source IP persistence. Illustrated simply below is our situation.
Cloud <--> Load Balancer <--> INTERNET <--> NAT <--> 20 clients
Because the LB uses Source IP persistence all the web requests from all the clients hit the same node in the cloud. This is, of course due to the NAT which makes sure every TCP/IP packet contains the same source IP.
Because all the requests hit the same node in the cloud very often the node produces a 503 error: http://www.checkupdown.com/status/E503.html, because the node gets overloaded with connections.
What is the best solution for this problem? Note that we do not have control over the load balancer and the nodes in the cloud. We only have shell access to upload files for our web application.
- Install a web server at our local office which can handle 20 clients? (We actually don't want to do server maintainance.)
- Connect every client to the WAN such that every client gets its own IP adres? (Insecure and infeasible with IPv4, maybe feasible with IPv6.)
- See if our webhost can configure the load balancer to use DNS-based load balancing? (Will this solve our problem? Where will the DNS cache reside?)
- See if our webhost can configure the load balancer to use a HTTP cookie for load balancing? (Probably the best solution if nodes have a static IP adres.)
- Another solution all together...