我们有一个自定义的 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>