有可能有2个域名指向在Ubuntu服务器下运行的两个不同的虚拟机? 我的困境是我只有一个面向公众的IP地址。
这里是我想要实现的一个graphics:
/---FQDN1--->VM1 External IP ---- \---FQDN2--->VM2
我意识到,这可能会有一些陷阱,比如让应用程序绑定到不同的端口以避免冲突。
在网上阅读后,这可能是iptables,绑定,和/或鱿鱼代理。
首先,基于客户端访问的域,将IP或传输层的端口转发到不同的内部机器是不可能的。 因此,你想做的事情必须在networking堆栈的更高层次上完成。 但是你可能已经读过了,因为你在问代理。
在networking堆栈上移动一层,就可以find各种不同的协议。 有些很容易根据主机名进行代理,有些是不可能的。 我只知道四个协议,可以用这种方式代理。 从最简单到最难,他们是:
一个标准的HTTP代理可以为你处理HTTP协议。 它适用于任何发送主机头的客户端。 这个头在HTTP / 1.0中是可选的,在HTTP / 1.1中是必需的。 到目前为止,HTTP / 1.1已经有十多年的历史了,现在你可以期待几乎所有的客户端都支持它。
HTTPS有点棘手。 它只会与支持SNI的客户合作。 我认为你会发现支持它的多数,但是你可能会发现很less的客户仍然不支持SNI。 您可以将没有SNI支持的所有客户端转发到一个特定的服务器,以便至less有一个域可以为没有SNI的客户端工作。
我的build议是为每个服务器分配一个公共的IPv6地址。 这样,支持IPv6的客户端就不会得到代理的缺点,并且可以使用从代理到实际服务器的IPv6连接。 这也意味着代理实际上可以使用DNS查找来查找服务器的地址,这可能会简化一些事情。
我用http和https支持实现了这样一个代理,所以我知道这是可行的。 但我认为,对于您的设置,现成的代理可能是更好的select。 我认为鱿鱼可以做到这一点。 另一方面,我不认为iptables和绑定会帮助你很多。
最简单的方法是使用代理您的请求到虚拟机的反向代理。 (我只是假设我们在这里说HTTP)