Сбой веб-пакетов на узле-сервере, размещенном в Azure

#node.js #angular #azure #socket.io #ws

Вопрос:

У меня есть простой пример, который работает локально, но не в Azure. Мой первоначальный вопрос был немного специфичен для ошибки cors, которую я теперь обработал, и поэтому отредактировал эту часть. Но мне все еще не удается заставить WS работать в azure. И мне нужна помощь.;

 var server = http.Server(app);
const wss = new WebSocket.Server({server});

server.listen(8070, () => {
  console.log("Listening on "   port)
});


wss.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('message', (msg) => {
    console.log(msg)
    socket.send(JSON.stringify({hey:'you'}))
  })
});
 

строка подключения клиента:

 SOCKET_ENDPOINT = 'wss://******.azurewebsites.net/';
 

Я включил websockets в своей конфигурации приложения.

Редактировать:

Так что теперь я перевернул каждый камень. Даже переключил библиотеку из сокета.от io до ws. Та же проблема. Я зашел немного дальше, я думаю, что, пробуя разные вещи, теперь я получаю следующую ошибку «Firefox не может установить соединение с сервером на wss://*******.сайты azurewebsites.net:8070/.»

Edit2: http-обновление в порядке введите описание изображения здесь

Вот в чем ошибка введите описание изображения здесь

Правка 3: Команда Curl:

 * TCP_NODELAY set
* Connected to *******.azurewebsites.net (20.40.202.6) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=*.azurewebsites.net
*  start date: Sep 28 19:00:01 2020 GMT
*  expire date: Sep 28 19:00:01 2021 GMT
*  subjectAltName: host "********.azurewebsites.net" matched cert's "*.azurewebsites.net"
*  issuer: C=US; O=Microsoft Corporation; CN=Microsoft RSA TLS CA 01
*  SSL certificate verify ok.
> GET /socket.io/?EIO=4 HTTP/1.1
> Host: *********.azurewebsites.net
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Server: Kestrel
< WWW-Authenticate: Bearer realm="********.azurewebsites.net" authorization_uri="https://login.windows.net/<tenant>/oauth2/authorize" resource_id="<resource>"
< Date: Tue, 22 Jun 2021 05:56:15 GMT
< Content-Length: 0
< 
* Connection #0 to host *******.azurewebsites.net left intact
 

Комментарии:

1. Это проблема на стороне сервера. Вы добавили заголовок Access-Control-Allow-Origin для своей конечной точки? Это должно быть: Access-Control-Allow-Origin=<ваш-домен-вашего-сайта-это-вызывающая-конечная точка websocket>

2. Я использую npmjs.com/package/cors и это работает для моих конечных точек ОТДЫХА

3. В журналах приложений указано, что порт 8080 уже используется.

4. Обновлен мой ответ @pixelbits . Я не думаю, что проблема в корсе.

5. но сообщение об ошибке…

Ответ №1:

Я предполагаю, что вы размещаете свое приложение в службе приложений Azure?

Убедитесь, что у вас включена опция websocket в платформе: введите описание изображения здесь

Ресурс службы приложений -> Настройки ->> Вкладка «Общие настройки» — > > > Раздел «Настройки платформы»

Комментарии:

1. Да, это включено.

2. также я использую аутентификацию службы приложений с помощью AAD.

3. Я спросил на github ws здесь : github.com/websockets/ws/issues/1905 похоже, это как то связано с аутентификацией. Как мне это сделать?