我目前有一个域名注册了Linux / Apache服务器,我将用另一个新的IP地址replace。
迁移数据将相对较快,在此过程中可能会中断5分钟。
DNSlogging显然有6-12小时的TTL,我无法加速。
这种改变可能会带来什么后果? 据推测,仍在查看旧地址的用户将继续击中旧服务器,而DNS域名服务器的用户已过期或为空则会看到新域名。
是否有可能从旧服务器(使用Apache或iptables)到新IP进行某种redirect? 旧服务器可以继续运行,只要有必要。
您可以在旧的Web服务器上使用反向代理服务器。 build立起来可能有点麻烦,但只要ITS DNS是最新的,你就可以。
将会发生什么是:
如果您正在运行Apache,请查看mod_proxy。 如果您正在运行IIS,请查看ISAPI重写以获取此类function。
(请注意,如果要使用域名进行代理,旧Web服务器上的DNS需要是最新的,否则将其直接代理到IP地址,并确保主机正在监听IP而不使用主机名)
我的公司刚刚做了几个大的网站。 我们遵循的基本程序是:
对于Apache,你应该使用mod_rewrite作为redirect,这样你就可以保留客户端请求的URI。 一个简单的实现将是:
# old server <VirtualHost 1.1.1.1:80> ServerName www.domain.com RewriteEngine on RewriteRule ^(.*)$ http://www-new.domain.com$1 [L] </VirtualHost> # new server <VirtualHost 1.1.1.2:80> ServerName www.domain.com ServerAlias www-new.domain.com </VirtualHost>
这将做一个302临时redirectwww.domain.com/anything到www-new.domain.com/anything。 你希望它是暂时的,因为你可能希望search引擎只索引www.domain.com,而不是www-new.domain.com。
一旦www.domain.com的DNS更改已经传播到您满意的程度,您可以彻底转储www-new,或者轻轻缓解任何人使用另一个redirect将它重新使用到www。 这几乎和上面的一样。 设置旧服务器来处理www-new,将www-new的DNS更改为指向旧服务器,并在旧服务器上设置redirect,将www-newstream量发送到www:
# old server <VirtualHost 1.1.1.1:80> ServerName www-new.domain.com RewriteEngine on RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L] </VirtualHost> # new server <VirtualHost 1.1.1.2:80> ServerName www.domain.com # ServerAlias removed, no longer needed </VirtualHost>
这一次你想做一个永久的301redirect,再次在search引擎爬虫线索,www.domain.com是你希望他们索引的网站。
好的,根据@Farseeker的build议,我在旧的Apache服务器上设置了下面的configuration,将请求转发到新的服务器上:
<VirtualHost *> UseCanonicalName Off ServerAdmin [email protected] ServerName domain.com DocumentRoot /var/www/ ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://domain.com/ ProxyPassReverse / http://domain.com/ </VirtualHost>
为了确保旧服务器的地址正确,我在/etc/hosts一个条目:
1.2.3.4 domain.com
我还必须启用Apache mod_proxy和mod_proxy_http模块,并重新加载configuration:
a2enmod proxy a2enmod proxy_http /etc/init.d/apache force-reload
这是一个古老的线程,但也许会帮助某人:
除了Mark Henderson(mod_proxy)或James Sneeringer(302,301redirect到新子域)的答案之外,还可以在移动大型应用程序时添加关于数据库同步的其他内容。
如果您的Web项目使用数据库(例如MySQL),则在切换DNS之前,请确保来自两个服务器的应用程序(例如PHP)连接到同一个数据库。 因此,读写操作将在同一个地方进行,而且之后不必处理不同的数据库同步工具。
这可能(很可能)影响一台服务器的加载时间,但是在切换时间内,这可以被接受。
如果数据库服务器无法从外部访问,则可以在有权访问的Web服务器上设置mysql_proxy ,并且可以从外部IP访问该服务器。
当我需要这样做时,我使用iptables来做这件事。 快速DNAT / SNAT和所有的stream量神奇地重新出现在它应该是。 如果您真的需要维护源IP地址,则反向代理可以通过设置适当的标题来提供帮助,但这需要在两端都有大量的虚拟空间来确保它们全部匹配,所以我通常不会担心对于类似于迁移的事物,因为它是暂时的,并且降低TTL处理其中的大部分。