我有一个公网IP地址,一个路由器,以及路由器后面的多台服务器。
我想通过路由器将不同的域(全部使用 HTTP)转发到不同的服务器。
例如:
example1.com => 192.168.0.110
example2.com => 192.168.0.120
foo.example2.com => 192.168.0.130
bar.example2.com => 192.168.0.140
我知道这可以通过端口转发来实现,但我需要所有主机都在端口 80 上运行。
我找到了一些有关 IP 伪装的信息,但我发现这很难理解,而且我不确定这是否是我想要的。
我发现的另一种解决方案是将所有流量导向反向代理服务器,该服务器将请求转发到适当的服务器。那么 iptables 呢?
我正在使用 Billion 7404 VNPX 路由器。这款路由器是否有可以实现此目的的功能?
这些是我唯一的选择吗?我是否完全错过了什么?是否有一个比其它更值得推荐?
我搜索过四周但我认为我没有找到正确的关键词。
答案1
最好的解决方案是使用 HTTP 反向代理。为此,您可以使用:
我们正在使用带有 mod_proxy 的 apache,但我正在考虑使用 pound。
作为硬件设备,您可以使用 Cisco 内容服务交换机。请参阅:http://www.cisco.com/en/US/products/hw/contnetw/ps792/index.html
答案2
我有一个想法,想知道是否有人对此有反馈。
如果我使用反向代理的想法,我想我可以很简单地解决这个问题。我已经在其他服务器上使用了 Nginx,所以这是我选择的反向代理服务器。
在路由器上,我将把端口 80 上的所有传入连接转发到我的反向代理服务器。我将在此服务器上运行 Nginx,配置文件如下:
server {
listen *:80;
location / {
proxy_pass http://$host;
}
}
这看起来是将请求代理到同一主机。但这里有个窍门,在我的 /etc/hosts 文件中,我将把所有域映射到它们的内部 IP。
182.168.0.110 example1.com
182.168.0.120 example2.com
182.168.0.130 foo.example2.com
182.168.0.140 bar.example2.com
因此反向代理服务器会将请求的主机路由到同一主机,但此时它应该查找本地 hosts 文件,并将其映射到内部 IP 地址。这也意味着我可以“设置并忘记”Nginx 配置文件。
一个潜在的问题是,如果未配置本地主机名,则反向代理会将请求发送回互联网。不过,我认为 NAT 会阻止这种情况陷入无限循环。
这个解决方案在我的脑海中和纸面上似乎可行,但我暂时无法实现它。
有人能找出为什么这行不通的原因吗?
谢谢。