Habilitando o módulo Google PageSpeed no Nginx

Habilitando o módulo Google PageSpeed no Nginx

TL; DR

Trabalhar com Nginx é realmente fascinante, com o server rodando e sem muitas configurações personalizadas já se pode notar o quanto o desempenho melhora se comparado ao Apache, seu maior concorrente. O nginx é estável e consome bem menos recursos que os seus semelhantes. Você pode ver alguns testes de benchmark aqui e aqui.

O módulo Google PageSpeed acelera o seu site reduzindo o tempo de carregamento. O módulo aplica as melhores práticas de desempenho web nas páginas e nos recursos (CSS, JS e imagens) sem exigir que você modifique o seu conteúdo ou o seu fluxo de trabalho. É possível fazer através do Google PageSpeed:

  • Otimização de imagens: remoção de meta-data, redimensionamento dinâmico, recompressão;
  • Minificação, concatenação, inlining e outlining de CSS e Javascript
  • Inlining de estáticos pequenos
  • Lazy load de imagens e javascripts
  • Reescrita de HTML
  • Melhoria nos caches
  • Além de diversas outras funcionalidades

Se você estiver realmente interessado em obter excelentes resultados o primeiro passo pode ser justamente esse: Ter o módulo Google PageSpeed no Nginx. Infelizmente essa união é um pouco dificultada pelo próprio nginx que não possui suporte ao que podemos chamar de módulos dinâmicos, ou seja, ele não permite que após a instalação seja adicionado um módulo complementar. A única forma de adicionar esses módulos ao nginx é durante o processo de compilação. Vamos apresentar um método simples que usa o apt-get do debian/ubuntu para chegar ao resultado.

Baixando os requisitos

Mencionar a versão do ubuntu 14.04. Testei em versão anteriores mas a versão no repositorio do ubuntu era muito antiga.

Iremos baixar a build-dep do nginx e mais alguns itens para que a compilação seja feita de forma correta.

$ sudo apt-get -y update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
$ sudo apt-get -y install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl
$ sudo apt-get -y build-dep nginx
VER CÓDIGO COMPLETO

Feito o procedimento inicial damos inicio ao download do nginx na pasta home, para facilitar a localização, e em seguida faremos o download do PageSpeed já dentro do pasta de módulos do nginx. No momento que estou escrevendo esse texto estamos nas versões 1.4.6 do Nginx e 1.9.32.3 do Google PageSpeed

$ sudo mkdir /usr/local/src/nginx_modules
$ cd /usr/local/src/nginx_modules
$ sudo apt-get source nginx
$ cd nginx-1.4.6/debian/modules
$ sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.9.32.3-beta.zip
$ sudo unzip release-1.9.32.3-beta.zip
$ cd  ngx_pagespeed-release-1.9.32.3-beta/
$ sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.3.tar.gz
$ sudo tar -xzvf 1.9.32.3.tar.gz
VER CÓDIGO COMPLETO

Preparando a compilação

Agora que o módulo do google está no lugar certo editaremos o arquivo rules.

Nesse arquivo modificaremos os blocos config.status (config.status.core, config.status.full, config.status.light, config.status.extras, config.status.naxsi). Para cada um desse itens colocaremos a instrução --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.9.32.3-beta \ logo antes do >$@

$ cd /usr/local/src/nginx_modules
$ sudo cp nginx-1.4.6/debian/rules nginx-1.4.6/debian/rules-bkp
$ sudo nano nginx-1.4.6/debian/rules
VER CÓDIGO COMPLETO

Olha como um dos blocos ficou:

Inserindo o pagespeed pra ser compilado com o nginx

Iremos alterar também o changelog para que possamos melhor identificar o pacote mais tarde.

$ sudo nano nginx-1.4.6/debian/changelog
VER CÓDIGO COMPLETO

Logo após o numero da versão na 1º linha podemos colocar o identificador que acharmos melhor. No meu caso coloquei 1.4.6-1ubuntu3.2-devim

Devendo ficar algo como:

Defindo um custom name para os pacotes

Compilando o pacote

Iremos agora criar o pacote através do buildpackage. Esse processo poderá demorar um pouco então aguarde até o terminal ficar operativo novamente.

$ cd /usr/local/src/nginx_modules/nginx-1.4.6/
$ sudo dpkg-buildpackage -b
VER CÓDIGO COMPLETO

Agora que os pacotes foram gerados vamos dar uma olhada no resultado:

$  cd ~/nginx/
$ ls -1
VER CÓDIGO COMPLETO

Instalando o Nginx

Faremos a instalação do pacote full, common e o all

$  sudo dpkg -i nginx-full_1.4.6-1ubuntu3.2-devim_amd64.deb nginx-common_1.4.6-1ubuntu3.2-devim_all.deb nginx_1.4.6-1ubuntu3.2-devim_all.deb
VER CÓDIGO COMPLETO

Podemos verificar que o nginx foi instalado com sudo nginx -V assim como também podemos ver que o modulo pagespeed está listado junto com os outros módulos.

Execute sudo update-rc.d nginx defaults para reiniciar automaticamente o nginx no caso do servidor ser reiniciado.

Habilitando o módulo

Antes de ativar o módulo temos que criar uma pasta onde o nginx fará cache dos arquivos de seus sites:

$ sudo mkdir -p /var/ngx_pagespeed_cache
$ sudo chown -R www-data:www-data /var/ngx_pagespeed_cache
VER CÓDIGO COMPLETO

Editaremos o arquivos de configuração do nginx

$ sudo nano /etc/nginx/nginx.conf
$ sudo service nginx restart
VER CÓDIGO COMPLETO

E adicionaremos as seguintes linhas no bloco http. Você pode mudar o name

##
#ngx_pagespeed module settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
pagespeed XHeaderValue "GooglePageSpeed powered by [NAME]";
VER CÓDIGO COMPLETO

Para confirmar que o pagespeed foi executado podemos fazer o seguinte teste:

$ curl -I -p http://localhost|grep X-Page-Speed
VER CÓDIGO COMPLETO

Para evitar que o seu pacote seja substituído no futuro com um lançamento mais recente do nginx, você deve fixar seu pacote com um arquivo preferences.d através dos seguintes passos:

$ sudo nano /etc/apt/preferences.d/nginx
VER CÓDIGO COMPLETO

E nele ter as seguintes instruções

Package: nginx
Pin: version 1.4.6-1ubuntu3.2-devim
Pin-Priority: 1001
VER CÓDIGO COMPLETO

Conclusão

Referências

Artigos relacionados

Comentários