通过 NAT 路由器将不同的主机名转发到不同的内部 IP

通过 NAT 路由器将不同的主机名转发到不同的内部 IP

我有一个公网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 会阻止这种情况陷入无限循环。

这个解决方案在我的脑海中和纸面上似乎可行,但我暂时无法实现它。

有人能找出为什么这行不通的原因吗?

谢谢。

相关内容