Problema: tengo un proxy inverso nginx instalado en un servidor ubuntu solo con IP privada. El propósito de este proxy inverso es enrutar la solicitud entrante a varios sockets web y RestAPI de terceros. Además, para distribuir la carga, tengo un equilibrador de carga http ubicado detrás del servidor proxy nginx.
Así es como se ve técnicamente:
IncomingRequest --> InternalLoadBalancer(Port:80) --> NginxReverseProxyServer(80) --> ThirdParyAPIs(Port:443) & WebSockets(443)
El problema que tengo es que Nginx no invierte_proxy correctamente en las RestAPI y da un error 502, pero funciona correctamente para Web Sockets.
A continuación se muestra mi archivo de configuración /etc/nginx/sites-available/default : (No se realizan cambios en ningún otro lugar)
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; location /binance-ws/ { # Web Socket Connection ####################### THIS WORKS FINE proxy_pass https://stream.binance.com:9443/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } location /binance-api/ { # Rest API Connection ##################### THIS FAILS WITH 502 ERROR proxy_pass https://api.binance.com/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } } Incluso intenté agregar https://api.binance.com:443/ pero no tuve suerte.
La conexión websocket funciona bien:
wscat -c ws://LOADBALANCER-DNS/binance-ws/ws/btcusdt@aggTrade
Sin embargo, el siguiente falla:
curl http://LOADBALANCER-DNS/binance-api/api/v3/time
Cuando veo los registros de nginx para el error 502, esto es lo que veo:
[error] 14339#14339: *20 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 10.5.2.187, server: , request: "GET /binance-api/api/v3/time HTTP/1.1", upstream: "https://52.84.150.34:443/api/v3/time", host: "internal-prod-nginx-proxy-xxxxxx.xxxxx.elb.amazonaws.com"
Esta es la llamada RestAPI real que estoy tratando de simular desde nginx:
curl https://api.binance.com/api/v3/time
He revisado muchas publicaciones casi similares, pero no puedo encontrar qué/dónde me estoy equivocando. ¡Aprecio tu ayuda!