Wordpress Nginx Proxy Cache e EasyEngine - NGINX.BLOG.BR
Início Nginx WordPress Nginx Proxy Cache e EasyEngine
04/08/2016 Robson LopesNginx, Wordpress15 comentários
Achei interessante a seguinte definição que encontrei na wiki:
Em redes de computadores, um proxy (em português procurador) é um servidor (nesse caso um AWS rodando com Nginx) que age como um intermediário para requisições de clientes solicitando recursos de outros servidores.
Em outras palavras, vamos colocar o Nginx como intermediário entre nosso navegador e o servidor de origem, onde estarão os arquivos (Digital Ocean, Linode, Vultr e etc..)
A vantagem de usar um sistema assim é que vamos ganhar redução de latência quando as requisições entrarem em cache e ainda diminuir de forma absurda a carga sobre nosso cloud.
Para iniciar a nossa configuração vamos precisar de 2 servidores, um no Brasil e outro nos EUA. Mas porque isso?
Simples, para reduzir custos.
O servidor de número um poderá ser uma instância T2 micro na Amazon, que é grátis por 1 ano. O servidor de número dois poderá ser um cloud de 5 dólares. Dessa forma você monta um cache bacana gastando muito pouco.
Servidor T2 Micro AWS – São Paulo
IP Elástico
Servidor Vultr, DigitalOcean, Linode
Configurar servidor proxy cache com Nginx em São Paulo para redução de load de conteúdo estático e melhoria de latência.
Configurar servidor PHP e MySQL na Vultr para entrega de conteúdo dinâmico (php) de forma rápida com EasyEngine.
Segurar e proteger servidor de origem com regras de segurança Nginx.
Proporcionar um ambiente de alto tráfego para sites WordPress com baixo investimento.
Configurando o Proxy - Servidor 1
Limpeza do Cache - Servidor 1
Instalando o Easy Engine - Servidor 2
Instalando o WordPress - Servidor 2
Cache HIT vs Cache MISS
Pronto para começar? Vamos em frente!
1 – Crie uma conta na Aws
2 – Abra um ticket pedindo para mudar o VPC para São Paulo
3 – Crie uma instância T2 Micro em São Paulo com IP Elástico (vai usar Virgínia? Pare aqui mesmo, esse tutorial não funcionará.)
4 – Abra sua T2 Micro no console SSH
Não sabe logar em um Ec2? Veja os primeiros videos do Curso AWS 2015 ensinando a fazer isso.
Após login, execute:
Vamos usar o EasyEngine para configurar os dois servidores, com ele fica fácil instalar o Nginx com os módulos necessários.
Durante o processo de instalação o script irá perguntar seu nome e email, preencha sem medo e continue.
Depois de finalizar a instalação execute:
Substitua o arquivo nginx.conf pelo que colocarei abaixo:
Delete todo o conteúdo e insira no lugar:
add_header X-Powered-By "NginxFacil";
add_header Microcache $upstream_cache_status;
log_format '$remote_addr $upstream_response_time $upstream_cache_status [$time_local] '
É um arquivo praticamente igual exceto algumas linhas para correto funcionamento do proxy.
Agora vamos criar um novo arquivo dentro da pasta /etc/nginx/conf.d chamado proxy.conf, ele servirá para carregar as diretivas de proxy_cache nos VHOSTS.
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=nginx:10m inactive=60m;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_valid 200 301 302 404 1h;
Por fim, vamos criar o VHOST responsável pelo funcionamento do proxy cache e apontamento para o servidor de origem.
Crie um VHOST
nano aws.vhost
Coloque dentro desse arquivo
server_name nginx.blog.br www.nginx.blog.br;
proxy_cache nginx;
proxy_pass http://IP-VULTR:80;
#location ~ /purge(/.*) {
#proxy_cache_purge my_zone "$scheme$request_method$host$1";
Altere as linhas server_name e proxy_pass pelo nome de seu domínio e número ip do seu servidor de 5 dólares respectivamente.
Galera, encontrei alguns plugins que seriam úteis, porém alguns muito antigos que poderiam trazer problemas de segurança.
Bem, resolvi então deixar que o próprio Nginx defina o tempo de cache, preste atenção para entender.
A área de login de seu WordPress não terá cache, portanto suas operações de postagens não serão alteradas e você não terá problemas com cache ao criar páginas e postagens. Porém na Home a coisa muda de figura, haverá um cache meio agressivo.
Para adequar isso as suas necessidades, basta definir o tempo em que o servidor proxy dará ao seu navegador uma resposta para atualizar a página.
A linha responsável por isso:
Você encontrará essa linha no arquivo proxy.conf e no aws.vhost
Observe os itens 200 e 1h, o primeiro diz respeito ao response code e o segundo ao tempo de cache. Se você remover o código 200 suas páginas sairão do cache, isso é legal quando você está com site em desenvlvimento. Se seu site está em funcionamento pleno não remova o código 200.
Agora observe que por padrão o cache está definido para 1 hora proxy_cache_valid 200 301 302 404 1h; , você tem que mudar isso de acordo com sua necesidade. Para meu blog acho 1 hora bem razoável e interessante, assim minhas páginas vão carregar rápidas para a maioria dos usuários.
Se você reduzir o tempo demais, o cache terá um efeito menor e consequentemente menos diminuição de carga no servidor de 5 dólares.
A boa notícia é que você pode usar esse proxy para sites em hospedagens compartilhas e melhorar sua performance.
Parte fácil e rápida!
Crie um cloud de 5 dólares e instale o EasyEngine. Para isso, você precisará efetuar o login por SSH.
Com o ee instalado, agora fica fácil adicionar novos sites em WordPress.
ee site create meusite.com.br --wpfc --php7
Esse comando vai instalar um site WordPress totalmente configurado com PHP7 e cache FastCGI. Não faça mudanças no admin achando que está melhorando editando o W3 Total Cache. Você só está piorando o setup, deixe inalterado.
Se você quiser migrar um site WordPress existente faça o seguinte:
SE VOCÊ NÂO TIVER CERTEZA DO QUE ESTARÁ FAZENDO, SAIBA QUE PODERÁ PERDER SEUS DADOS! FAÇA ISSO POR CONTA E RISCO PRÓPRIOS
1 – Adicione seu domínio antes de migrar ee site create meudominio.com.br –wpfc –php7
2 – Abra o arquivo wp-config.php que está na pasta /var/www/meudominio.com.br e anote o nome do banco de dados, usuário e senha. (Importante: não delete esse arquivo)
3 – Delete todo o conteúdo que está em /var/www/meudominio.com.br/htdocs
4 – Acesse o PhpMyAdmin SEU-IP:22222 (execute primeiro em seu ssh, ee stack install –phpmyadmin) com o usuário e senha http gerado pelo EasyEngine na hora que você adicionou o WordPress no item 1.
5 – Delete as tabelas do banco de dados criado para seu domínio pelo EasyEngine. (Não delete o banco mas apenas as tabelas)
6 – Faça o upload do seu WordPress para a pasta /var/www/meudominio.com.br/htdocs
7 – Faça um backup em seu computador e depois remova o wp-config.php que estiver dentro de /var/www/meudominio.com.br/htdocs
8 – Execute o comando a seguir dentro da pasta /var/www/meudominio.com.br/htdocs para corrigir as permissões
9 – Volte ao PhpMyAdmin e faça o upload do banco de dados do seu WordPress que está em migração para o banco criado pelo EasyEngine, informações coletadas no item 2.
10 – Depois de upado o banco execute no SSH
Pronto, site migrado com sucesso.
Simples e fácil. Para apontar o DNS corretamente, basta apontar para o IP ELÁSTICO da instância Ec2 da AWS e seu cache começará a funcionar.
1 – Crie um zona do TIPO A e coloque o Ip Elástico da Aws
2 – Crie uma zona do TIPO CNAME para www e coloque o nome de seu domínio.
Se você usa o Cloudflare, coloque as nuvens em cor cinza.
Sempre que for adicionar mais sites para usar esse cache, será preciso criar um vhost para o domínio em questão.
É Isso, fácil não?
Comentem os resultados e compartilhem.
Observe que você terá duas camadas de cache:
1 – Proxy Reverso
2 – FastCGI ou Microcache no servidor de origem
O cache FastCGI é tranquilo usando o plugin Nginx Helper que faz limpeza automática, já o cache do proxy precisa ser definido para um tempo que não prejudique suas páginas.
É importante observar se esses caches estão funcionando corretamente, para fazer isso acesse esse site:
http://www.webconfs.com/http-header-check.php digite o nome do seu domínio e veja o resultado.
Observe a imagem a seguir, precisamos do resultado HIT em nosso header, essa é a confirmação de que o conteúdo está sendo enviado pelo prroxy cache.
HIT – Conteúdo sendo servido pelo cache e portanto é isso que queremos.
MISS – Indica que o conteúdo não foi encontrado em cache, isso pode ser normal no primeiro acesso.
Nesse exemplo não estou usando EasyEngine e nem Microcache no servidor de origem, no seu caso vai aparecer a resposta do FastCGI cache também.
Deu Miss? Calma, o primeiro teste é isso mesmo, tente novamente, se der Miss aí sim tem algo errado.
Aprendi com muitos erros que ao testar sites em ferramentas como Gtmetrix nosso alvo não deve ser as notas ali, mas sempre o tempo e a resposta do servidor.
Essas notas são úteis porque nos ajudam a entender o nível de otimização do nosso site, no entanto, o tempo é prioritário.
Agora observe o teste a seguir, esse blog nginx.blog.br está hospedado nos Estados Unidos e mesmo assim com o proxy cache e o teste sendo executado a partir de São Paulo os resultados são incríveis.
Tempo de Load – 1.2 segundos
Tempo de Resposta – 32ms
Tempo baixo e resposta rápida, objetivos alcançados. Faça bom uso do tutorial e compartilhe com seus amigos!
Tags: acelerar wordpress, easyengine, nginx cache, nginx.blog.br, servidor wordpress, wordpress, wordpress nginx
Post Anterior CloudFlare Nginx Restaurar IP Real do Visitante Próximo Post NginxFacil Lite Download Grátis
Opencart Mini Cluster Litespeed PHP7 MariaDB
01/08/2016 Robson Lopes
05/08/2016 12:46 pm
Ansioso para o conteúdo final, estou gostando bastante de acompanhar seu blog! Obrigado por compartilhar um pouco dos seus conhecimentos!
Estou testando essa configuração, ainda está com alguns problemas de cache, mas a velcidade está incrível, alucinante. Assim que conseguir resolver irei postar com todo prazer para usuários legais iguais a você.
11/08/2016 9:19 pm
alguma novidade deste tutorial gostaria muito de testar
Opa amigo, esse final de semana sai. Falta de tempo!
estou enfrentando este erro.
nginx: [emerg] unknown log format "rt_cache" in /etc/nginx/sites-enabled/22222:7
12/08/2016 3:30 pm
rm -rf /etc/nginx/sites-enabled/22222
Se o nginx responder com syntax ok é só reiniciar.
Mas perai, esse procedimento, apenas se for no server 1, se for no dois, você terá que buscar e resolver o problema.
12/08/2016 3:35 pm
Ótimo tutorial, sempre acompanhando o blog, parabéns
12/08/2016 3:42 pm
31/08/2016 3:14 pm
Ótimo tutorial Robson!
Uma dúvida é quanto a utilização do cache para vários domínio, no caso pelo que entendi posso usar a instância AWS como centralizador de cache, e para que isso ocorra devo adicionar uma nova .vhost.
A dúvida é o nome dessa nova .vhost, ou seja, além da aws.vhost que você indica no tutorial devo adicionar uma nova (aws2.vhost) e dentro dessa colocar as informações do outro domínio seria isso?
Obrigado pelo apoio e compartilhamento do seu conhecimento. Parabéns!
02/09/2016 11:43 pm
Ao adicionar novos vhosts basta você duplicar o atual, editar o nome de domínio e ip de destino do servidor backend. O nome pode ser qualquer coisa que deseja, meusite.vhost por exemplo.