目前有一个外部 IP 指向 Windows Web 服务器。现在想添加一个 Linux Web 服务器。想知道以下设置是否可行:
119.xxx.xxx.xxx 指向 Window Web Server
119.xxx.xxx.xxx/Linux_Server 指向新附加的 Linux 服务器。
如果上述方案可行,那么应该怎么做呢?(路由器应该放在哪里,配置等)。
如果上述方案不常见或不可行,请建议最佳实践方案。
希望有了解的人能帮忙...
答案1
如果您在完全相同的外部 IP 上有两个不同的服务器,则通信需要路由到两个不同的端口。例如,服务器 A 为 119.1.1.1:9000,服务器 B 为 119.1.1.1:9001
如果您不希望最终用户输入 119.1.1.1:9000,并且希望两个服务器都在端口 80 上 - 则必须这样做:使用侦听端口 80 的内部代理并根据子域或域将传入请求转发到两个服务器中每个服务器的正确“内部”ip(或“x”个服务器)。
例子:
认为:
- 119.1.1.1:80 是端口 80 监听器
- 对于服务器 A,为 119.1.1.1:9000;
- 119.1.1.1:9001(对于服务器 B)
因此请像这样设置:
- foo.com 在端口 80 上(119.1.1.1:80)
- serverA.foo.com 转到端口 80(119.1.1.1:80),并将根据子域名“serverA”在内部将请求路由(不是重定向,而是内部透明路由)到 119.1.1.1:9000
- serverB.foo.com 也转到端口 80(119.1.1.1:80),根据子域名“serverB”透明地路由到 119.1.1.1:9001
- 所有其他请求都由路由器按照您的意愿处理 - 它们可以被拒绝并返回 404(例如 foo.com 或 serverXYZ.foo.com 返回 404 错误,因为它与代理表中的任何定义都不匹配)。
注意:对于上述内容,您实际上是在 119.1.1.1 上工作 - 那么代理表定义都应该全部说 127.0.0.1 例如:
- serverA.foo.com --> 127.0.0.1:9000
- serverB.foo.com --> 127.0.0.1:9001
- 默认 --> 127.0.0.1:9002
通过透明路由最终用户不知道通信被路由 - 它发生在服务器端,最终用户不知道 - 只有您知道。您可以使用 Node.js 的 node-http-proxy 来做到这一点 - 您可以使用 nginx 来做到这一点 - 您可以使用大多数服务器来做到这一点 - 在您所选服务器的文档中查找如何内部代理请求。
如果必须使用相同的端口,则需要使用两个不同的 IP 地址,例如服务器 A 使用 119.1.1.1:80,服务器 B 使用 119.121.1.2:80
答案2
由于您需要安装路由器,并且没有足够的公共地址来为每台服务器分配一个,因此您需要定义一个内部网络,以便两台服务器可以相互通信并访问公共连接。
不幸的是,HTTP 服务器假定重定向 URL 是公开的,因此 30x 重定向只会要求客户端浏览器访问另一台主机。由于您的 Linux 服务器只能在您的局域网内访问,因此客户端将获得他们无法使用的 URL 并且找不到服务器。
考虑使用 NAT,并将 TCP 端口(如果您有附加服务,则转发多个端口)转发到每个内部服务器上的服务。您只能使用每个端口一次,但如果 IIS 具有 tcp/80,则可以分配 apache 或 nginx 端口 81。这确实意味着客户端必须进入http://example.com:81/
才能访问该服务。但是,您可以使用 dns 来掩盖这一点。您甚至可以使用该 url 进行 301 重定向到您的 linux 服务器。
拿到路由器后,查看http://portforward.com/针对您的路由器型号来了解如何使用 NAT 将流量转发到端口。