假设有两个域名指向我的 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
您需要有一个类似apache
或nginx
在端口 6000 上运行的 Web 服务器。然后,该 Web 服务器可以按照您预定义的规则将您的请求重新路由到所需的端口。