Я хочу сделать балансировку нагрузки websocket с Nginx. Сервер (MyServer) написан на C #, а порт 8080 открыт как для запросов websocket, так и для запросов http:
app.Use(async (context, next) =>
{
if (context.Request.Path == "/wsDataImport")
{
if (context.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false);
await WebSocketHandler.DataImportHandler(context, webSocket).ConfigureAwait(false);
}
else
{
context.Response.StatusCode = 400;
}
}
else if (context.Request.Path == "/wsBroadcast")
{
if (context.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false);
await WebSocketHandler.BroadcastHandler(context, webSocket).ConfigureAwait(false);
}
else
{
context.Response.StatusCode = 400;
}
}
else
{
await next().ConfigureAwait(false);
}
});
Без Nginx я могу запустить соединение через веб-сокет во внешнем интерфейсе (файл js) следующим образом, и тест в порядке:
const ws1 = new WebSocket("ws://{IP}:8080/wsDataImport")
const ws2 = new WebSocket("ws://{IP}:8080/wsBroadcast")
С Nginx я изменяю его на:
const ws1 = new WebSocket("ws://ws/wsDataImport")
const ws2 = new WebSocket("ws://ws/wsBroadcast")
И часть конфигурации nginx:
location /ws/ {
proxy_pass http://{IP}:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Но я получаю эту ошибку:
WebSocket connection to 'ws://ws/wsBroadcast' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
Кто-нибудь может мне помочь? Большое спасибо!