я попросил этот вопрос сначала на 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 вы должны иметь возможность перенаправлять запросы веб-сокетов на свои серверы через обратный прокси-сервер.