通过主机转发端口?

通过主机转发端口?

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

  1. Windows 2008,运行我的 DNS 和 IIS7
  2. Ubuntu 11.4 Server,运行 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如果我对192.168.1.3有请求

这是否需要首先通过我的 2008 机器进行路由,还是我可以从路由器进行此操作?

答案1

要实现此功能,您需要一个反向代理,如果您在 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 创建一个虚拟主机:并向其中添加以下内容:

<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 或指向 Windows 服务器上同一站点的内部 DNS 名称

答案2

我不相信路由器会查看主机名。客户端在发送请求之前会解析 DNS。因此,目标 IP 将在请求中设置,路由器将根据目标 IP 进行路由。

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

这也许有助于我们了解您需要使用什么应用程序/协议来执行此操作。HTTP?SSH?

顺便说一下,我使用 SSH 指定两个不同的端口来实现这一点。对一个服务器的请求转到端口 22,对另一个服务器的请求转到端口 29。YMMV

相关内容