主机转发端口?

我有2台机器和一台运行DD-WRT的路由器。 我的机器,

  1. Windows 2008,运行我的DNS和IIS7
  2. Ubuntu 11.4服务器,运行Apache 2。

目前,我已将所有对端口80上的外部IP地址的请求转发给我的Windows 2008计算机。 我最近添加了附加的Ubuntu服务器,并且我想根据主机路由到IP地址。 目前,端口和服务器之间只有1对1的关系,所有端口80的请求都会去往Windows 2008机器。 作为一个例子,这是我想要做的事情:

如果我有一个请求进入我的路由器example-a.com ,我会转发到192.168.1.2

如果我有一个example-b.com', I would forward it to的请求example-b.com', I would forward it to 192.168.1.3`

这是需要通过我的2008年机器路由首先,或者我可以从路由器做到这一点?

对于这个function,你需要一个反向代理,如果你在你的ubuntu服务器或nginx上使用apache,这是相当容易实现的最小的额外工作

简而言之,你要做的是将你的路由器端口转发到你的ubuntu服务器,然后设置web服务器来监听example-a.com和example-b.com

假设example-a.com是在Windows服务器上,然后您将在Ubuntu服务器上设置example-a.com来反向代理到您的Windows服务器

对于Apache这个看起来像这样:

1 – 确保以下行在您的apache2.conf文件中并取消注释:

 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so 

2-为example-a.com创build一个虚拟主机:并添加以下内容:

 <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http:/internalexample-a.com ProxyPassReverse / http://internalexample-a.com 

3-在你的Ubuntu服务器上重新启动apache

这将允许你代理到Windows服务器取代internalexaple-a.com与example-a.com响应在win服务器上的IP或内部DNS名称指向在Windows服务器上的同一站点

我不相信路由器会看到主机名。 DNS在发送请求之前由客户端parsing。 所以Destination IP将被设置在基于Dest IP的请求和路由器路由中。

这对Web服务器有效的原因是因为HTTP协议在HTTP请求(包括主机头)中包含了主机名,但是这在数据包中很深,而不是路由器看到的东西。

它可以帮助我们知道你需要做什么的应用程序/协议。 HTTP? SSH?

FWIW,我通过指定两个不同的端口来执行此操作。 请求一台服务器转到端口22,另一台转到端口29. YMMV