我的配置:
Debian 8.6
带有 5 个虚拟机的 VirtualBox
5 个不同的域名(domain1.com、domain2.com、domain3.com...)
一个静态/公共 IP(195.113.xxx.yyy)
服务器在私有网络中,公有 IP 将所有流量转发到服务器的私有 IP
我需要指向 domain1.com >>> virtualbox VM1, domain2.com >>> virtualbox VM2
所以:
当我-> 我正在连接到 VM1(sshd 设置不是我的问题的一部分)
ssh [email protected]
当我将 domain1.com 放入浏览器时,我得到了 VM1 上的 apache 的结果(apache 设置不是我的问题的一部分)
非常感谢您的回答,我希望我写得尽可能清楚:)
答案1
这不是这样工作的。SSH 和 HTTP 等 TCP 连接是通过 IP 建立的,而 IP 是第 3 层,域名则远远超出了第 3 层,因此您不能只是说“将发往该域名的所有流量发送到此 VM”。
不过,你可以对网站使用反向代理:https://en.wikipedia.org/wiki/Reverse_proxy
例如,Apache 可以做到这一点,您必须让它在具有外部 IP 的主机上运行。
例子:
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://192.168.0.2/ #internal IP of your 1st domain
ProxyPassReverse / http://192.168.0.2/ #internal IP of your 1st domain
ServerName domain1.com
</VirtualHost>
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://192.168.0.3/ #internal IP of your 2nd domain
ProxyPassReverse / http://192.168.0.3/ #internal IP of your 2nd domain
ServerName domain2.com
</VirtualHost>
如果您想使用 https,请记住您必须使用 SNI(大多数但并非所有客户端都支持)。
为了更好地理解图片: http://iws.io/multiple-web-servers-over-a-single-ip-using-apache-as-a-reverse-proxy/
答案2
您必须使用端口转发。假设 vm1 ip 为 192.168.1.5。因此,您应该将端口 80(http)和端口 22(ssh)从公共 ip(195.113.xxx.yyy)转发到 192.168.1.5。对所有 vm 执行此操作。在主服务器 192.168.1.5 domain1.com 的 /etc/hosts 中创建主机条目,因此,如果您访问 domain1.com,它将转到 192.168.1.5