Допустим, у меня есть два домена, указывающих на мой IP:
first.com и second.com указывает на 127.0.0.1
Когда кто-то подключается к first.com:6000 он должен пойти в 127.0.0.1:6000. Но когда кто-то подключается к second.com:6000 Мне нужно, чтобы пойти в 127.0.0.1:6001.
Как лучше всего этого добиться? Я использую Ubuntu 10.10.
Это невозможно.
Имя домена преобразуется в IP-адрес подключающимся клиентом, а IP-связь с сервером просто содержит запрос порта на IP-адресе, в который он разрешен. Чтобы найти другое решение, вам придется изменить конфигурацию программного обеспечения. Вам либо нужно сначала программно сделать другой запрос, либо отвечающий сервер выполняет некоторую работу в фоновом режиме, либо, возможно, ваш API может запрашивать домен как часть вашего чата с портом.
Что вам нужно, так это мультиплексор для TCP-соединений. Возможно, вы можете использовать HAProxy (http://www.haproxy.org/) делать то, что вы хотите, но есть и другие варианты. HAProxy не ограничивается HTTP-соединениями. Например, я знаю кого-то, кто использовал его для SMTP-соединений. Идея заключается в следующем. Вы определяете интерфейс HAProxy, работающий на порту 6000, который имеет два правила для диспетчеризации трафика:
frontend frontend_name
bind *:6000
acl first_host hdr(host) -i first.com
acl second_host hdr(host) -i second.com
use_backend first_backend if first_host
use_backend second_backend if second_host
Затем вы определяете два серверных модуля для каждого хоста. Вам понадобятся три отдельных порта для внешнего интерфейса и два внутренних порта. Я лично не тестировал, но синтаксис должен быть более-менее нормальным.
Изменить: это будет работать только для соединений HTTP / HTTPS. Однако, если ваш протокол включает имя сервера в запрос, возможно, будет возможно извлечь имя сервера из запроса с помощью функции req.payload.
Для некоторых протоколов вы можете использовать записи SRV dns: https://en.wikipedia.org/wiki/SRV_record
Вам нужен веб-сервер вроде apache
или nginx
работает на порту 6000. Затем этот веб-сервер может перенаправить ваши запросы на желаемый порт в соответствии с вашими предопределенными правилами.