Проблема: у меня установлен обратный прокси-сервер nginx на сервере ubuntu только с частным IP-адресом. Целью этого обратного прокси-сервера является маршрутизация входящего запроса к различным сторонним веб-сокетам и RestAPI. Кроме того, для распределения нагрузки у меня есть http loadbalancer, сидящий за прокси-сервером nginx.
Так вот как это выглядит технически: IncomingRequest --> InternalLoadBalancer(Port:80) --> NginxReverseProxyServer(80) --> ThirdParyAPIs(Port:443) & WebSockets(443)
Проблема заключается в том, что Nginx неправильно выполняет reverse_proxy для RestAPI и выдает ошибку 502, но успешно работает с веб-сокетами.
Ниже приведен мой файл конфигурации /etc/nginx/sites-available/default
: (в других местах никаких изменений не делалось)
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;
}
}
Я даже пытался добавить https://api.binance.com:443/, но безуспешно.
Подключение через веб-сокет работает нормально: wscat -c ws://LOADBALANCER-DNS/binance-ws/ws/btcusdt@aggTrade
Однако следующий вариант не работает: curl http://LOADBALANCER-DNS/binance-api/api/v3/time
Когда я вижу журналы nginx для ошибки 502, я вижу следующее: [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"
Это реальный вызов RestAPI, который я пытаюсь смоделировать из nginx: curl https://api.binance.com/api/v3/time
Я просмотрел много почти похожих сообщений, но не смог найти, что/где я иду не так. Ценю твою помощь!