一台主机,一个静态/公共 IP,多个 VPS,多个域。如何路由?Debian Linux

一台主机,一个静态/公共 IP,多个 VPS,多个域。如何路由?Debian Linux

我的配置:

  • 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

相关内容