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

Порт перенаправления для конкретного имени хоста?

Допустим, у меня есть два домена, указывающих на мой 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. Затем этот веб-сервер может перенаправить ваши запросы на желаемый порт в соответствии с вашими предопределенными правилами.