Nginx ip_hash does not load-balance connections to meteor backend

Solution 1:

Yes, this happens because ip_hash uses only the first three octets of the IP address for selecting the backend node.

You can use hash $remote_addr; directive to make nginx use the complete remote IP address for hash. Downside of this is that if a node goes down, all hash mappings change, and sessions will be lost.

More information on upstream selection methods can be found at nginx upstream module documentation.