【问题标题】:Ruby TCPSocket Server - Can I tell to what host a client was connecting?Ruby TCPSocket 服务器 - 我可以告诉客户端正在连接哪个主机吗?
【发布时间】:2014-01-21 06:51:44
【问题描述】:
我有一个基于 TCPSocket(非 HTTP)的 ruby 服务器。
我有 2 个不同的域,都指向我的服务器 IP 地址的 A 记录(同一个)。因此,有客户端连接到这些域之一。
是否可以判断客户端连接到哪个域?
我看到这在其他协议中是可能的,但我不确定这是基于手动添加的标头还是真的从基本的 tcp/ip 连接中提取。例如。在 PHP 中有 $_SERVER["HTTP_HOST"] 显示客户端连接到哪个域。
【问题讨论】:
标签:
ruby
sockets
tcpsocket
【解决方案1】:
在 TCP 套接字级别,唯一已知的是连接的源和目标 IP 地址(和端口)。在这一层无法知道如何通过 DNS 解析 IP 地址。即使 HTTP 在 TCP 之上工作,HTTP 服务器也必须查看来自客户端的 HTTP 标头以了解它们正在向哪个域发出请求。 (这就是 HTTP_HOST 值的填充方式。)
一种可能的解决方案是将您的服务器配置为具有额外的 IP 地址。这可以通过为 NIC 分配额外的 IP 地址或添加额外的 NIC 来实现。然后让每个域使用不同的 IP 地址。否则,这是不可能的,您可能需要考虑基于 TCP 的应用程序协议来传达此信息。