So a few things I can think of. Since this is HTTP response 426 it's basically means upgrade required. The way you have your nginx set up one thing you can try to do is do away with the upgrade proxy headers and see what happens. So it goes from:
NGINX:
location /socket/ {
proxy_pass http://xx.xx.x.xx:2589;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
To
NGINX:
location /socket/ {
proxy_pass http://xx.xx.x.xx:2589;
}
Another thing to try is, if the application is running on the same server, is to not use the public IP address but instead the local loopback (127.0.0.1) since this is done on the backend anyways and does not affect what the end user will get.