Redirecionar acessos para um servidor Wordpress secundário usando Nginx
22 Dec 2016Alguns de vocês provavelmente acompanhou, mas recentemente eu decidi atualizar meu antigo wordpress blog do PHP4~5 para um mais recente. Deixando meu host compartilhado e indo para o heroku e posteriormente para Amazon EC2.
Eu precisava decidir se eu manteria o Wordpress ou se eu mudaria para uma tecnologia diferente, como Jekyll? Ou o que? Eu pensei bastante sobre isso e no fim eu decidi utilizar Jekyll, por que? Para ser sincero, usando algo mais novo/recente me motiva a estudar e fuçar mais a fundo para conseguir as coisas rodando.
Depois que decidi que usaria o Jekyll, eu precisava pensar sobre meu dominio, eu queria manter meu blog antigo rodando como histórico mas também gostaria de fazer redirecionamento correto para não perder meus pontos de SEO por exemplo, então como manter 2 blogs funcionando de uma maneira inteligente sem quebrar os links antigos?
Eu pensei que o ideal seria algo que tentasse acessar o novo site e caso não encontrasse, deveria redirecionar para o blog antigo rodando Wordpress, mas como atingir isso somente quando a página não fosse encontrada e de uma maneira boa para SEO (utilizando 301 para os redirects)?
Depois de algum tempo brincando e lendo a documentação do nginx eu achei uma maneira de rodar um servidor com um proxy e caso o acesso falhe, interceptar o mesmo e redirecionar para outro servidor do nginx.
Então para fazer isso eu tenho um arquivo de configuração do nginx com multiplas configurações, a primeira delas possui a configuração do Wordpress, esse servidor é bem simples e somente trata acessos de páginas PHP com o PHP FPM basicamente usando um subdomínio.
O meu servidor secundário é basicamente um servidor no nginx que serve arquivos estáticos que foram gerados com o Jekyll.
E o último e mais importante servidor é o que é responsável por tentar acessar o servidor Jekyll e caso a página não seja encontrada no mesmo, fazer o redirect para o servidor antigo no Wordpress. Esse é um pouco mias complexo, eu estou criando um proxy com capacidade de interceptar erros usando proxy_intercept_errors on;
e redirecionando esses casos para um outro servidor com error_page 404 = @wordpress;
e neste caso não é um proxy transparente, eu faço redirect utilizando response code 301.
Então a configuração do meu nginx é uma composição desses 3 servidores.
O que vocês acham? Vocês tem alguma pergunta?
Matheus