在一个 DNS 下设置不同的应用程序实例

在一个 DNS 下设置不同的应用程序实例

我们有一个自定义的 Java Web 应用程序。我们正在不同的 VPS(不同的提供商、不同的位置)的实例中设置它。例如:

Instance 1: http://server1/app1
Instance 2: http://server1/app2
Instance 3: http://server2/app3

每个实例都是独立且自足的。我们有几个此类实例的文档,并将继续添加它们。

我的问题是关于 DNS 管理,因为我们想将不同的子域映射到实例。

client1.mypp.com  > http://server1/app1
client2.mypp.com  > http://server1/app2
client3.mypp.com  > http://server2/app3

clientN.mypp.com  > http://anyserver/appN

现在我们正在手动将 A 记录添加到 DNS 记录中,以将子域与 IP 关联起来。我们将使用 DNS 提供商的 API 开发一些代码来执行此操作。

这是最合适的方法吗?我们应该使用某种代理吗?我们预计在不同的服务器上会有数千个实例。我对性能和可用性感兴趣。

答案1

最有效的方法是摆脱对 IP/端口的依赖,使用 URL 中的某些内容将您引导至正确的服务。

客户端1.mypp.com 应用程序1http://server1/app1

client2.mypp.com app2http://server1/app2

这可以是负载均衡器或反向代理。例如,请参阅 nginx、haproxy、pound 等。

在此处输入图片描述

答案2

DNS 不会对端口做任何事情。因此,即使您创建了 A 记录,访问 client1.mypp.com 也不会让您的浏览器转到端口 8080。您必须浏览到 client1.mypp.com:8080。

您想要的是在您的 Java Web 应用程序前面使用 Apache 或类似程序。使用 Apache mod_proxy 和 VirtualHost,您可以实现您想要的。

Apache 配置示例:

<VirtualHost *:80>
  ServerName client1.mypp.com
  ProxyPass / http://server1:8080
  ProxyPassReverse / http://server1:8080
</VirtualHost>

相关内容