我目前有一个为 Linux/Apache 服务器注册的域名,我将在新的 IP 地址上用另一个域名替换它。
迁移数据将相对较快,并且在此过程中中断 5 分钟是可以接受的。
DNS 记录的 TTL 显然是 6-12 小时,我无法加快速度。
这种变化的可能后果是什么?大概还在查看旧地址的用户会继续访问旧服务器,而 dns 缓存已过期或为空的用户将看到新域。
是否可以从旧服务器(使用 Apache 或 iptables)到新 IP 进行某种重定向?旧服务器可以根据需要继续运行。
我目前有一个为 Linux/Apache 服务器注册的域名,我将在新的 IP 地址上用另一个域名替换它。
迁移数据将相对较快,并且在此过程中中断 5 分钟是可以接受的。
DNS 记录的 TTL 显然是 6-12 小时,我无法加快速度。
这种变化的可能后果是什么?大概还在查看旧地址的用户会继续访问旧服务器,而 dns 缓存已过期或为空的用户将看到新域。
是否可以从旧服务器(使用 Apache 或 iptables)到新 IP 进行某种重定向?旧服务器可以根据需要继续运行。
我的公司刚刚在几个大型网站上做到了这一点。我们遵循的基本程序是:
对于 Apache,您可能应该使用 mod_rewrite 进行重定向,这样您就可以保留客户端请求的 URI。一个简单的实现是:
这将为 www.domain.com/anything 执行 302 临时重定向到 www-new.domain.com/anything。您希望它是临时的,因为您可能希望搜索引擎仅索引 www.domain.com,而不是 www-new.domain.com。
一旦 www.domain.com 的 DNS 更改传播到您的满意,您可以完全转储 www-new,或者通过另一个重定向轻轻地让任何使用它的人回到 www。与上面的过程几乎相同;将旧服务器设置为处理 www-new,将 www-new 的 DNS 更改为指向旧服务器,并在旧服务器上设置重定向,将 www-new 流量发送到 www:
这次你想做一个永久的 301 重定向,再次提示搜索引擎爬虫 www.domain.com 是你希望他们索引的站点。
您可以在旧 Web 服务器上使用反向代理。设置可能需要一些工作,但只要ITS DNS 是最新的,您就可以了。
将会发生的是:
如果您正在运行 Apache,请查看 mod_proxy。如果您正在运行 IIS,请查看 ISAPI Rewrite 以获得此类功能。
(请注意,如果要使用域名进行代理,旧 Web 服务器上的 DNS 需要保持最新。否则,将其直接代理到 IP 地址并确保主机正在侦听没有主机名的 IP)
好的,根据@Farseeker 的建议,我在旧的 Apache 服务器上设置了以下配置,以将请求转发到新服务器:
为了确保旧服务器有正确的地址,我输入了一个条目
/etc/hosts
:我还必须启用 Apache
mod_proxy
和mod_proxy_http
模块,并重新加载配置:这是一个旧线程,但也许它会帮助某人:
除了 Mark Henderson (mod_proxy) 或 James Sneeringer(302,301 重定向到新子域)的答案之外,在移动大型应用程序时,还可以添加关于数据库同步的另一件事。
如果您的 Web 项目使用数据库(例如 MySQL),在切换 DNS 之前,请确保来自两台服务器的应用程序(例如 PHP)连接到同一个数据库。这样读取和写入都在同一个地方,之后您不必处理不同的数据库同步工具。
这(很可能)会影响一台服务器上的加载时间,但在切换期间这是可以接受的。
如果无法从外部访问数据库服务器,您还可以在可以访问它并且可以从外部 IP 访问的 Web 服务器上设置mysql_proxy 。
当我需要这样做时,我会使用 iptables;快速的 DNAT/SNAT 和你所有的流量神奇地重新出现在它应该出现的地方。如果您确实需要维护源 IP 地址,则反向代理可以通过设置适当的标头来提供帮助,但这需要在两端进行大量工作以确保它们都匹配,所以我通常不担心对于像迁移这样的事情,因为它是瞬态的,降低 TTL 可以处理大部分问题。