Minha empresa fez isso com vários sites grandes. O procedimento básico que seguimos foi:
- Diminua o TTL do domínio o máximo possível. Faça isso com antecedência por pelo menos o tempo que o TTL atual.
- Configure o site no novo servidor exatamente como você deseja que o "produto final" seja
- Adicione um nome alternativo ao site no novo servidor, como www2.domain.com ou www-new.domain.com. Com o Apache, você usaria a diretiva ServerAlias . Se o site tiver algum código dinâmico (PHP, mod_perl, RubyOnRails etc.), verifique se o site se comportará e responderá corretamente com esse novo nome.
- No momento da transição, configure um redirecionamento no servidor antigo apontando para o novo servidor
- Mude o DNS para www para ir para o novo IP.
Para o Apache, você provavelmente deve usar mod_rewrite para o redirecionamento, a fim de preservar os URIs solicitados pelo cliente. Uma implementação simples seria:
# 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>
Isso fará um redirecionamento 302 temporário para www.domain.com/anything para www-new.domain.com/anything. Você deseja que seja temporário, porque provavelmente deseja que os mecanismos de pesquisa indexem apenas www.domain.com, não www-new.domain.com.
Depois que a alteração do DNS para www.domain.com for propagada para sua satisfação, você poderá despejar o www-new por completo ou facilitar com facilidade quem o usar de volta ao www com outro redirecionamento. É quase o mesmo processo acima; configure o servidor antigo para lidar com www-new, altere o DNS para www-new para apontar para o servidor antigo e configure um redirecionamento no servidor antigo enviando o tráfego www-new para 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>
Dessa vez, você deseja fazer um redirecionamento 301 permanente, novamente para descobrir nos rastreadores dos mecanismos de pesquisa que www.domain.com é o site que você deseja que eles indexem.