重定向特定主机名的端口?

重定向特定主机名的端口?

假设有两个域名指向我的 IP:

首家第二家指向127.0.0.1

当有人连接到first.com:6000它应该去127.0.0.1:6000。但当有人连接到second.com:6000我需要它去127.0.0.1:6001

实现此目的的最佳方法是什么?我正在使用 Ubuntu 10.10。

答案1

这不可能。

连接客户端会将域名解析为 IP 地址,而与服务器的 IP 通信仅包含对解析到的 IP 地址上的端口的请求。您必须更改软件配置才能找到其他解决方案。您要么首先以编程方式发出不同的请求,要么让应答服务器在后台执行某些工作,或者您的 API 可以在与端口聊天时提示输入域名。

答案2

对于某些协议,您可以使用 SRV DNS 记录:https://en.wikipedia.org/wiki/SRV_record

答案3

您需要的是 TCP 连接的多路复用器。也许您可以使用 HAProxy (http://www.haproxy.org/) 来做你想做的事,但还有更多选择。HAProxy 不仅限于 HTTP 连接。例如,我知道有人将它用于 SMTP 连接。这个想法如下。您定义一个在端口 6000 上运行的 HAProxy 前端,它有两个调度流量的规则:

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 函数从请求中提取服务器名称。

答案4

您需要有一个类似apachenginx在端口 6000 上运行的 Web 服务器。然后,该 Web 服务器可以按照您预定义的规则将您的请求重新路由到所需的端口。

相关内容