redirect到基于子域的其他内部服务器

这是我的情况

家庭networking,Windows机器,1个面向外部的IP地址(允许端口80)1个Windows家庭服务器始终在机器上,计划升级到WHS 2011不久。 几台使用自己的networking服务器并直接访问的IP摄像机。

我的问题/目标:

我喜欢能够从外部访问我的家庭networking上的IP摄像机和服务器,通过子端口,通过端口80.即:cam1.mydomain.com,cam2.mydomain.com,nas.mydomain.com等

他们目前已经build立了端口转发,但是我所处的很多networking都locking了所有非标准端口,所以我需要他们全部在端口80上。据我所知,这不能在路由器级完成,需要在Web服务器级别完成,这很好。

实质上,这只是内部路由到不同的服务器取决于子域,我希望是一个相对简单的解决scheme的常见问题。

让我知道,如果我留下任何东西。 提前致谢。

(顺便说一句,如果所有东西都相等,IIS比apache更可取)

如果您通过HTTP访问服务(即直接在Web浏览器中而不是通过插件或其他客户端应用程序),那么您可以使用像nginx这样的反向代理来执行此操作 – 可以select将代理发送到哪个请求取决于传入的“主机”标题行(通过为每个子域使用其自己的代理传递设置的一个“服务器”指令)。

你不能在你的路由器上这样做,除非你正在运行一些运行(或允许你安装)像nginx这样的可以充当反向代理的程序的自定义固件,但是如果你将TCP80端口转发到一台运行nginx的机器,然后这个技术就可以工作了。

https://help.ubuntu.com/community/Nginx/ReverseProxy给出了一个nginx作为反向代理的示例configuration(如果你需要更多的话,会有更多的例子)。 许多其他Web服务器或任何专门devise用于提供反向代理服务的应用程序应该能够为您做到这一点。 Apache可以,如果你有mod_proxy(该IIRC一般存在,但没有默认加载)。 IIRC IIS 不能没有第三方附加组件(这可能会花费),但是有大部分可以完成这个工作的开源工具的Windows版本,所以即使你完全是Windows环境,你仍然可以使用它们。

你可以通过在你的公共地址上运行一个apache实例来做到这一点(实际上,这意味着将80端口从你的路由器转发到任何可以为你运行apache的内部框),并为每个子域定义一个虚拟主机,并使用代理服务器把它传递给真实的内部地址:

<VirtualHost *:80> ServerName cam1.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyErrorOverride On ProxyPass / http://192.168.1.123/ ProxyPassReverse / http://192.168.1.123/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost> <VirtualHost *:80> ServerName cam2.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyErrorOverride On ProxyPass / http://192.168.1.124/ ProxyPassReverse / http://192.168.1.124/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost> 

其中cam1在内部192.168.1.123和cam2 192.168.1.124等