![单个域名可能解析至多个服务器](https://linux22.com/image/796459/%E5%8D%95%E4%B8%AA%E5%9F%9F%E5%90%8D%E5%8F%AF%E8%83%BD%E8%A7%A3%E6%9E%90%E8%87%B3%E5%A4%9A%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
第一次来 Server Fault,我提前道歉,这个域名的东西不是我的强项。任何建议都非常感谢。我完全迷失了,非常累!
我从我的前任那里继承了一个极其复杂的系统,我正在努力寻找一种方法来解决它 - 否则我就需要有人告诉我这是不可能的。
- 我有一个旧网站
ServerA
(某种 Linux 发行版),域名为SomeDomain.com
- 有一个新的网站
ServerB
(Ubuntu),目的是SomeDomain.com
在未来提供服务(它将取代旧网站) ServerA
还有一个 Web 应用程序,目前公司内其他部门正在使用(可从 访问SomeDomain.com/web-app/
)
目标:让SomeDomain.com
此域名的所有扩展名(子域名、URL 等)在 上为新网站提供服务ServerB
。但是,URLSomeDomain.com/web-app/
必须为 上的 Web 应用程序提供服务ServerA
。
问题:这ServerA
是与托管公司共享的服务器,但限制非常严格 - 我无法调整 DNS 设置(名称服务器除外 - 但无法设置 A 记录或任何其他内容,我有完全访问权限来做ServerB
我想做的事情)。因此,Web 应用程序必须从SomeDomain.com/web-app/
而不是从子域或任何其他内容提供服务。这些限制使得将 Web 应用程序从 迁移Server A
到 变得Server B
相当不可取,而且这个 Web 应用程序将在不久的将来被替换,所以现在不值得付出努力。
因此,最终我希望 1 个域名Server B
在大多数情况下能够解析为 的 IP 地址,但如果 URL 是SomeDomain.com/web-app/
,则应解析为Server A
的 IP。
注意:从技术上讲,域名不必解析为一个或另一个 IP - 但最终 URL 必须保持一致
我尝试过的一些方法:
- 我已经研究过 mod_rewrite 和 .htaccess 来尝试实现这种效果,但它看起来对我来说不起作用 - 但我可能做错了(在 上
Server B
,我只是检查了请求 URI 是否是/web-app/
并尝试在 上提供/web-app/
文件夹Server A
) - 我确实有能力修改两台服务器上的名称服务器
- 我无法在
Server A
上创建一个指向的子域名Server A
(我猜是因为托管公司的服务器使用 URL 来确定服务的网站)。我想这可能很好,因为我可以设置一个 A 记录来Server B
指向 Web 应用程序Server A
- 但可惜的是,Server A
需要SomeDomain.com
。
如果还有什么我可以提供的信息,请告诉我。我需要正确的方向、想法或解决方案。
答案1
这里存在一系列问题,使得事情并不像想象的那么简单。
首先,我认为处理这个问题的最佳方法是:
- 如果您无法更改服务器 A 上的设置,请保留原样
www.somedomain.com
。 - 将服务器 B 上的完全限定域名设置为
www2.somedomain.com
。 - 添加使用 mod rewrite 或任何你喜欢的方式将流量从 重定向
www2.somedomain.com/web-app
到www.somedomain.com/web-app
。
现在来看一下细节。
DNS 服务器将 fqdn 解析为 ip 地址。它们无法帮助您处理以下任何内容(例如路径)。DNS 请求甚至不包含请求路径。
在共享服务器上,它几乎肯定使用 HTTP 1.1 和基于名称的虚拟主机。换句话说,该框有一个 IP 地址,它会查看请求中的 HOST 标头来确定要服务哪个站点。因此,如果您执行基于 IP 地址的重定向,服务器 A 将只收到一个 HTTP 请求123.123.123.123/web-app/foo
,而该服务器上有无数个站点,它将不知道如何处理它。
由于您的服务器具有不同的内容(至少对于一条路径),并且您不能使用基于 IP 地址的重定向,因此您必须使用不同的 fqdn 来区分它们。
由于旧站点可能已经设置为,www.somedomain.com
而且ServerName
听起来您无法更改它,因此您唯一的选择是创建一个新的服务器名称。
答案2
您也可以考虑这个选项:
在服务器 B 上配置您的网络服务器,使其充当反向代理,访问服务器 A 的特定位置 /web-app/,并从服务器 B 加载其他位置的内容。
配置非常简单和直接,您会发现许多可用的示例。