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

Веб-сокеты и брандмауэр

я попросил этот вопрос сначала на Stack Overflow, но потом я подумал, что Server Fault может быть лучшим местом для публикации.


У меня есть два сервера WebSocket, оба работают на портах, отличных от 80 и 443. Эти два сервера работают за брандмауэром, у которого открыты только порты 80 и 443.

WebSocket Server A:800 |
                       |-----|FireWall:80 & 443|-----> INTERNET
WebSocket Server B:801 |

Я ищу способ для моих клиентов подключаться к серверам WebSocket, не зная их порт и не открывая брандмауэр для любых других портов, а не 80 и 443.

Итак, я подумал, может быть, промежуточный сервер (или прокси-сервер) между моим брандмауэром и серверами WebSocket можно настроить таким образом, чтобы, когда клиенты запрашивали www.mywebsite.com/a через порт 80 или 443 (для прохождения брандмауэра) промежуточный сервер подключает клиента к серверу WebSocket A. И когда клиент запрашивает www.mywebsite.com/b через порт 80 или 443 промежуточный сервер подключает его к серверу WebSocket B. Возможно ли это? и если да, то есть ли какой-нибудь сервер, о котором вы, возможно, знаете, на котором реализована эта функция?

С другой стороны (может быть, не очень), в чем будут различия между Дырокол TCP и подход, который я объяснил выше?

Я бы предложил mod_proxy_wstunnel модуль доступен в Apache 2.4.5 и новее. Он позволяет выполнять ретрансляцию с URL-адреса на другой сервер веб-сокетов на любом порту.

например Чтобы взять ваш пример:

ProxyPass /ws1/  ws://websocketserverA:800/
ProxyPass /ws2/  ws://websocketserverB:801/

Похоже, вам нужно добавить обратный прокси между вашим брандмауэром и вашими серверами.

Используя модуль websocket apache вы должны иметь возможность перенаправлять запросы веб-сокетов на свои серверы через обратный прокси-сервер.