将端口 80 上的特定域转发到内联网中的另一台服务器

将端口 80 上的特定域转发到内联网中的另一台服务器

我有一个有趣的问题,在盲目尝试随机的东西之前,我想看看你们认为最好的解决方案是什么。

基本上,我家里有两台服务器(一台 Linux 和一台 Windows),它们都运行在标准的 Linksys 路由器后面。目前,端口 80 被转发到我的 Linux 机器,因为它托管了许多网站。但是,随着我的 Windows 服务器的增加,我也需要它能够使用端口 80。显然,我不能让路由器将 80 转发到两者,所以我想知道是否有办法让 Linux 服务器自动(透明地)通过隧道/转发/任何请求给定域到 Windows 机器。因此,当来自域 blah.example.com 的请求到达 Linux 服务器时,我希望它直接将其发送到 Windows 服务器进行处理,如果是任何其他域,Linux 服务器应该自行处理而不是转发它。理想情况下,我希望以这样一种方式完成此操作,即 Windows 服务器不需要进行特殊配置:它不应该能够区分其他服务器转发的请求和路由器直接转发的请求。

我知道这可能需要修改 IP 表或类似的东西,如果是这样,请慢慢来,因为我以前从未弄过这些东西。另外,我现在没有物理访问权限,只有 SSH,所以如果您建议的任何内容可能会破坏/禁用 SSH 连接(这显然会非常糟糕),请警告我。任何帮助都将不胜感激,提前谢谢!:)

答案1

查看 Apache 的 mod_proxy (http://httpd.apache.org/docs/2.0/mod/mod_proxy.html)。基本上,您将为 forwardthistowindows.example.com 设置一个 VHOST,并告诉 mod_proxy 将所有这些请求传递到 windows.example.com。

查看文档,但你可能需要类似


ProxyPass / http://windows.example.com

答案2

如果您尚未在 Linux 机器上使用 Apache,我不建议您仅仅为了这个目的使用它,因为它太过分而且会占用更多的机器资源。

我建议你使用nginx:它轻量、稳定,已被主要网站使用,例如wordpress.com(看这里). 来自 nginx 的关于页面

nginx [engine x] 是一个 HTTP 和反向代理服务器

您需要使用 nginx 作为反向代理 - 以下是在 Ubuntu 上如何做到这一点。我还建议你看看nginx 官方 wiki 代理示例


根据您的评论进行编辑:

要将真实 IP 转发到 Windows 主机,请设置此标头:

proxy_set_header  X-Real-IP  $remote_addr;

希望有所帮助。

答案3

您可能想要做的是反向代理。假设 Linux 服务器上的其他网站在 Apache 下运行。然后使用mod_proxy你的配置将会是这样的:

<VirtualHost *:80>
    ServerName externalwin.example.com
    ProxyPass / http://internal.example.com/
    ProxyPassReverse / http://internal.example.com/ 
</VirtualHost>

还有许多其他方法可以使用 Apache 和其他 Web 或代理服务器软件配置反向代理。

您需要在 Windows 服务器上配置的唯一事情是确保其输出的任何 URL 都使用外部地址。

相关内容