Назад | Перейти на главную страницу

Обратный прокси-сервер IIS и веб-сокеты, неудачное рукопожатие веб-сокета

У меня есть небольшой веб-сайт, использующий IIS 7.5 на Windows Server 2008 R2. У меня тоже есть приложение node.js, работающее на порту 3000.

Http-вызовы с веб-сайта (клиентский браузер) обратным проксированием из http://example.com/node/whatever к http://localhost:3000/whatever. Пока все работает нормально.

Проблема в том, что я пытаюсь использовать socket.io.

Я получаю:

WebSocket connection to 'ws://example.com/socket.io/?EIO=3&transport=websocket&sid=adb9WRpoMFYRoS0vAAAB' failed: Error during WebSocket handshake: Unexpected response code: 502 

Я почти уверен, если я не ошибаюсь, что:

Он перенаправляет начальный запрос на мой сервер, поскольку начальный запрос на сервер веб-сокета является стандартным HTTP-запросом (с некоторыми дополнительными заголовками). IIS знает об этом и просто пересылает запрос. Однако после получения запроса веб-сокета сервер веб-сокета отправляет ответ 101 и переключается в режим веб-сокета. IIS не понимает трафик веб-сокета и не может его проксировать.

Есть ли уловка или решение для настройки обратного прокси для адресов ws: //?

Похоже, что поддержка WebSocket не была доступна в IIS 7.5.

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support