Ошибка Socket.io во время рукопожатия WebSocket: неожиданный код ответа: 500 windows server iis - PullRequest
0 голосов
/ 29 марта 2020

У меня есть экземпляр EC2 с сервером windows. На сервере windows я установил IIS. Это позволяет обрабатывать запросы http.

Я использовал https://github.com/win-acme/win-acme для генерации сертификата. Затем я добавил его, используя сайт по умолчанию с помощью диспетчера IIS.

Затем я настроил обратный прокси-сервер, следующий за https://tecadmin.net/set-up-reverse-proxy-using-iis/

После того, как все это было настроено, я наконец загрузите мой node.js сервер через порт: 4000. Этот порт используется для прокси: 80.

Я делаю HTTP-запрос к серверу и сталкиваюсь с двумя основными проблемами, которые я не понимаю.

Одна из них - настройка Websockets в моем node.js сервер, использующий https://socket.io/, показывает failed: Error during WebSocket handshake: Unexpected response code: 500

Вторая важная проблема - мой запрос выполняет некоторую обработку и занимает одну или две минуты. На полпути через это просто не удается. Я не уверен, почему это так.

До настройки HTTPS он работал через localhost на моем MA C. HTTPS не позволяет делать запросы через HTTP. Вот почему мне пришлось настроить HTTPS на моем windows сервере. С тех пор, как я настроил HTTPS, я столкнулся с этой проблемой. Так что я уверен, что это связано с моей настройкой, описанной выше.

Любое понимание было бы удивительным!

1 Ответ

0 голосов
/ 05 апреля 2020

Убедитесь, что на вашем IIS установлены и включены модули перезаписи URL и ARR (кэш маршрутизации запросов приложений).

В этом примере предположим, что ваш основной веб-сайт работает в домене example.com. (https и http - я обычно использую Letsencrypt для сертификата HTTPS). Я предполагаю, что узел с socket.io находится на том же сервере (поэтому я использую адрес 127.0.0.1 ниже) и на порту 4000.

Вам не нужно устанавливать сертификат SSL на узле, поскольку IIS будет шифровать связь для вас.

Теперь пришло время настроить модуль перезаписи URL (для всего сервера IIS, а не для вашего сайта).

Если вы хотите, чтобы websockets работал на http (ws) и https ( wss) также необходимо создать карту перезаписи. Я обычно создаю его как 'MapProtocol'.

Вам нужно 4 записи:

http -> http
https -> http
ws -> ws
wss -> ws

Затем создайте правило перезаписи входящего URL-адреса

Шаблон:

^socket\.io/([\s\S]*)

Условия: {HTTP_HOST} соответствует шаблону example.com {CACHE_URL} соответствует шаблону ^ (. +): //

Переменные сервера:

HTTP_Sec_WebSocket_Extensions -> none
Check 'replace the current value'

Действие: переписать

{MapProtocol:{C:1}}://127.0.0.1:4000/{R:0}
Check 'append the query string' and 'stop processing of subsequent rules'

Вот и все. Теперь вы можете проверить, работает ли правило, посетив: http://example.com/socket.io/socket.io.js

или

https://example.com/socket.io/socket.io.js, если у вас правильно настроен сертификат ssl на вашем сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...