A partir do nginx 1.9.5, há suporte experimental para HTTP/2. Este artigo irá mostrar-lhe como ativar o HTTP/2 na sua configuração Nginx. Isso pode ser ativado ou desativado por vhost, ele não tem que ser ativado em todo o servidor.
Atenção: por um breve período, o Chrome deixou de suportar HTTP/2 no ALPN. Mas agora suporta NPN novamente, e o HTTP/2 vai funcionar em uma instalação recente de CentOS, Debian ou Ubuntu. Mais detalhes aqui.
HTTP/2 em Nginx no CentOS/Red Hat
Se você estiver em Red Hat ou CentOS, certifique-se de habilitar o repositório da linha principal para nginx. Essa é considerada uma versão experimental, o que poderia quebrar as coisas.
O seu repositório yum deve ser parecido com isto:
$ cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
Se você já tiver nginx instalado, atualize via yum clean all && yum update nginx ou instale nginx (se você já não o tiver) por meio de yum install nginx.
HTTP/2 em Nginx no Ubuntu/Debian
Se você estiver trabalhando com Debian ou Ubuntu, certifique-se as fontes de linha principal estão adicionadas ao seu arquivo /etc/apt/sources.list.
$ cat /etc/apt/source.list ... deb http://nginx.org/packages/mainline/debian/ codename nginx deb-src http://nginx.org/packages/mainline/debian/ codename nginx
Em seguida, atualize sua instalação nginx com apt-get clean && apt-get install nginx.
HTTP/2 no Nginx requer pelo menos a versão 1.9.5
Verifique se a sua versão nginx é pelo menos a 1.9.5.
$ nginx -v nginx version: nginx/1.9.5
Qualquer coisa abaixo disso ainda não terá suporte para HTTP/2, e você será saudado com a seguinte mensagem de erro.
nginx: [emerg] invalid parameter "http2" in /etc/nginx/conf.d/ssl.conf:2 nginx: configuration file /etc/nginx/nginx.conf test failed
Habilitar HTTP/2 no Nginx
Agora, a fim de habilitar HTTP/2, você precisa ter um vhost SSL/TLS habilitado. Em outras palavras: você precisa de um certificado SSL, já que HTTP/2 só é aplicado sobre TLS.
Tornar o HTTP/2 habilitado é tão simples como permitir SPDY, é uma bandeira na diretiva listen na sua configuração de host virtual.
Adicione as palavras-chave http2 à sua configuração virtualhost.
server { listen 443 ssl http2; server_name your.fqdn.tld; access_log access.log main; error_log error.log error; # Start the SSL configurations ssl on; ssl_certificate /etc/nginx/conf.d/certificate.crt; ssl_certificate_key /etc/nginx/conf.d/certificate.key; # Add any other TLS optimisations like strong ciphers etc ... # ... }
A habilitação é realmente simples assim, basta mudar a sua linha SSL disto:
server { listen 443 ssl; ... }
para isto:
server { listen 443 ssl http2; ... }
Atenção: você não pode misturar SPDY e HTTP/2. Se você tentar ativar ambos, você obterá um erro na inicialização do nginx.
nginx: [warn] invalid parameter "spdy": ngx_http_spdy_module was superseded by ngx_http_v2_module in /etc/nginx/conf.d/vhost.conf:12
Se você só quer brincar com HTTP/2, você pode criar um certificado SSL autoassinado, e implementar isso no seu vhost.
Falta de push do lado do servidor
Até agora, Nginx não suporta um dos recursos mais poderosos do HTTP/2: fazer push no lado do servidor. Apenas nghttp2 parece ter esse suporte neste momento.
Mas HTTP/2 traz uma série de melhorias, como multiplexação TCP, compressão de cabeçalho, menos sharding do domínio…, o que faz com que esse upgrade valha muito a pena.
Testando HTTP/2
Já há alguns benchmarks de HTTP/1.1 vs HTTP2 lá fora, mas o melhor teste é o que você pode fazer sozinho.
Já que Nginx agora torna realmente fácil habilitar HTTP/2, ativamos isso também em nosso site corporativo: www.nucleus.be. Quer testar o HTTP/2? Basta navegar em nucleus.be.
Se você está curioso para saber como detectar se você está em HTTP/1.1 ou HTTP2, você pode visualizar o protocolo HTTP/2 no seu Chrome Inspector.
Mais material de leitura sobre HTTP/2
Quer saber mais sobre HTTP/2? Aqui estão algumas sugestões:
- Architecting Websites For The HTTP/2 Era
- Presentation: HTTP/2: The Next Version of the Internet
- HTTP/2 explained
- Beware the dangers of implementing HTTPs/SSL/TLS
***
Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/enable-http2-in-nginx/