Já está sabendo do HTTP/2? Ele é um protocolo de comunicação desenvolvido com o objetivo de ser o sucessor dos protocolos HTTP/1.x. Foi desenvolvido com base no SPDY, um protocolo do Google, que visava aumentar o desempenho de páginas web. Caso queira saber mais, veja o Papo Reto que fiz sobre esse assunto.
Neste artigo vou mostrar como compilar o Nginx com suporte a HTTP/2. Utilizei um Ubuntu 14.04 e o Docker para rodar a imagem. Você pode ver nosso Dockerfile no Github clicando aqui.
Note que o suporte ao HTTP/2 no Nginx ainda está em alpha! Recomendo fazer um ambiente de testes antes de colocar em produção.
Se quiser utilizar o Docker, baixe a imagem e execute-a utilizando os comandos abaixo. Troque /caminho/do/meu-site/ pelo caminho absoluto para a pasta do seu site.
$ docker pull devopsbluesoft/nginx-h2 $ docker run -d -p 8443:443 -v /caminho/do/meu-site/:/usr/local/nginx/html/ devopsbluesoft/nginx-h2
Acesse seu site pelo link https://localhost:8443. Lembre-se de trocar localhost pelo IP da máquina onde o Docker foi executado.
Se você não quiser utilizar o Docker, siga os passos a seguir.
Atualize e instale as dependências do Nginx.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install gcc g++ make patch wget libpcre3-dev zlib1g-dev libssl-dev
Baixe o Nginx no diretório de sua preferência.
$ mkdir $HOME/src && cd $HOME/src $ wget -O nginx-1.9.3.tar.gz http://nginx.org/download/nginx-1.9.3.tar.gz $ tar xzf nginx-1.9.3.tar.gz
Baixe e aplique o patch para habilitar o HTTP/2 no Nginx.
$ cd nginx-1.9.3/ $ wget -O patch.http2.txt http://nginx.org/patches/http2/patch.http2.txt $ patch -p1 < patch.http2.txt
Compile o Nginx. Talvez seja necessário habilitar mais opções no configure dependendo das suas necessidades. As opções abaixo servem para sites estáticos.
$ sudo mkdir -p /usr/local/nginx $ ./configure --prefix=/usr/local/nginx/ --user=www-data --group=www-data --build=nginx-bsh2-1 --with-http_ssl_module --with-http_v2_module $ make $ sudo make install
Crie a chave e o certificado SSL.
$ sudo mkdir -p /usr/local/nginx/conf/ssl $ sudo openssl genrsa -out /usr/local/nginx/conf/ssl/h2-server.key 2048 $ sudo openssl req -subj "/C=BR/ST=SP/L=São Paulo/O=Acme Inc/OU=DevOps" -new -key /usr/local/nginx/conf/ssl/h2-server.key -out /usr/local/nginx/conf/ssl/h2-server.csr $ sudo openssl x509 -req -days 365 -in /usr/local/nginx/conf/ssl/h2-server.csr -signkey /usr/local/nginx/conf/ssl/h2-server.key -out /usr/local/nginx/conf/ssl/h2-server.crt
Conserte as permissões da chave e certificado.
$ sudo rm /usr/local/nginx/conf/ssl/h2-server.csr $ sudo chown -R www-data:www-data /usr/local/nginx/conf/ssl $ sudo chmod 0400 /usr/local/nginx/conf/ssl/h2-server.key $ sudo chmod 0444 /usr/local/nginx/conf/ssl/h2-server.crt
Copie o nginx.conf.
$ wget https://raw.githubusercontent.com/bluesoft/dockerfiles/master/nginx-h2/nginx.conf.docker $ sudo mv nginx.conf.docker /usr/local/nginx/conf/nginx.conf
Lembre-se de colocar o seu site em /usr/local/nginx/html.
$ sudo cp -R meu-site/* /usr/local/nginx/html/
Remova os arquivos baixados.
$ rm -r $HOME/src/nginx-1.9.3 $ rm $HOME/src/nginx-1.9.3.tar.gz
Inicie o Nginx.
$ sudo /usr/local/nginx/sbin/nginx -g "daemon off;"
Acesse seu site pelo link https://localhost. Lembre-se de trocar localhost pelo IP da máquina onde o Nginx foi instalado.
Para verificar se seu site realmente está sendo servido via HTTP/2, instale o SPDY indicator, para Firefox, ou o Chrome SPDY indicator, para o Chrome.
Parabéns! Você habilitou o HTTP/2 no seu site! 😀
Caso queira saber mais sobre o HTTP/2, confira o vídeo abaixo.
Até a próxima!