I have multiple nginx instances behind an AWS elastic load balancer. In the nginx config files, I am using ip_hash to force sticky sessions when connecting upstream. Is there a way to sync the route tables between the multiple nginx servers, so that no matter which nginx server handles the request, the traffic is sent to the same backend application server. When I first set this scenario up, I had no problems. But after heavy testing with multiple clients from different parts of the world, I was able to verify that the multiple nginx servers were not choosing the same backend application servers to route to. If I drop down to one nginx server, i can not recreate the issue. Attached is a diagram of my setup.
You could pass it back as a response header to the client via AJAX, and trigger a callback to AJAX POST a 'preferred' app-server id somewhere, having the one initially used. This is of course at the code level, to do this at the NGINX level, you might consider nginx-sticky-module.