Minha empresa acabou de fazer isso com vários sites maiores. O procedimento básico que seguimos foi:
- Reduza o TTL do domínio o máximo possível. Faça isso com antecedência 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 com alias 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.), certifique-se de que o site se comporte e responda corretamente com esse novo nome.
- No momento da transição, configure um redirecionamento no servidor antigo apontando para o novo servidor
- Altere o DNS de www para ir para o novo IP.
Para o Apache, você provavelmente deve usar o mod_rewrite para o redirecionamento, para que você possa 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 temporário de 302 para www.domain.com/anything para www-new.domain.com/anything. Você quer que ele seja temporário porque você provavelmente quer que os mecanismos de pesquisa indexem apenas www.domain.com, e não www-new.domain.com.
Uma vez que a mudança de DNS para www.domain.com tenha se propagado para sua satisfação, você pode baixar o www-new por completo ou suavemente facilitar a transferência de qualquer pessoa para www com outro redirecionamento. É quase o mesmo processo acima; configure o servidor antigo para manipular o 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>
Desta vez, você quer fazer um redirecionamento 301 permanente, mais uma vez para indicar aos indexadores de mecanismo de pesquisa que www.domain.com é o site que você deseja indexar.