Como Instalar Nginx com Suporte HTTP/2 no Ubuntu (Guia Completo)
Nginx é um dos servidores web mais amplamente implementados do mundo, celebrado pelo seu desempenho excepcional, baixo consumo de memória e capacidade de lidar com milhares de conexões simultâneas. Quando combinado com HTTP/2, Nginx torna-se uma plataforma ainda mais poderosa — permitindo requisições multiplexadas, compressão de cabeçalhos, server push e tempos de carregamento de página dramaticamente reduzidos.
Este guia abrangente o orienta em cada etapa necessária para instalar Nginx com suporte completo a HTTP/2 em Ubuntu 20.04 e Ubuntu 22.04 LTS, desde a configuração inicial até a configuração SSL, otimização de blocos de servidor e verificação ao vivo.
> Para quem é este guia? Administradores de sistemas, desenvolvedores e proprietários de sites que desejam maximizar o desempenho da web em um servidor Linux. Se você está executando seu site em um plano de VPS Hosting ou um Servidor Dedicado, este tutorial se aplica diretamente ao seu ambiente.
Índice
- O que é HTTP/2 e por que é importante?
- Pré-requisitos
- Passo 1 — Atualizar o Índice de Pacotes do Sistema
- Passo 2 — Instalar Nginx
- Passo 3 — Instalar OpenSSL
- Passo 4 — Obter um Certificado SSL Gratuito com Let’s Encrypt
- Passo 5 — Configurar Nginx para HTTP/2
- Passo 6 — Otimizar sua Configuração Nginx HTTP/2
- Passo 7 — Testar a Configuração Nginx
- Passo 8 — Reiniciar Nginx e Aplicar Alterações
- Passo 9 — Verificar se HTTP/2 Está Ativo
- Resolução de Problemas Comuns
- Conclusão
O que é HTTP/2 e por que é importante?
HTTP/2 é a segunda versão principal do Hypertext Transfer Protocol, padronizada em RFC 7540. Foi projetada para resolver as limitações de desempenho do HTTP/1.1, que está em uso desde 1997.
Principais vantagens do HTTP/2 sobre HTTP/1.1:
| Recurso | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Multiplexing | Uma requisição por conexão | Múltiplas requisições simultâneas |
| Compressão de cabeçalho | Cabeçalhos em texto simples | Compressão HPACK |
| Server push | Não suportado | Suportado |
| Protocolo binário | Baseado em texto | Framing binário |
| Reutilização de conexão | Limitada | Totalmente persistente |
| Latência | Maior | Significativamente reduzida |
Para proprietários de sites, ativar HTTP/2 se traduz diretamente em carregamentos de página mais rápidos, melhores pontuações de Core Web Vitals e rankings de SEO melhorados — já que o Google usa a velocidade da página como sinal de classificação.
> Importante: HTTP/2 requer HTTPS (TLS/SSL). Você não pode executar HTTP/2 em uma conexão não criptografada em nenhum navegador moderno. É por isso que obter um certificado SSL é uma etapa obrigatória neste guia. Se você precisar de um certificado confiável para seu domínio, AlexHost oferece Certificados SSL para todos os casos de uso.
Pré-requisitos
Antes de começar, certifique-se de ter o seguinte em vigor:
- Um servidor executando Ubuntu 20.04 LTS ou Ubuntu 22.04 LTS (os passos são quase idênticos para ambos)
- Um usuário não-root com
sudoprivilégios ou acesso direto root - Um nome de domínio registrado apontado para o endereço IP do seu servidor via um registro A
- Portas 80 e 443 abertas no seu firewall (UFW ou iptables)
- Familiaridade básica com a linha de comando Linux
Se você ainda não tem um domínio, pode registrar um diretamente através do Registro de Domínios AlexHost e apontá-lo para seu servidor em minutos.
Passo 1 — Atualizar o Índice de Pacotes do Sistema
Sempre comece atualizando seu índice de pacotes para garantir que você está instalando as versões mais recentes disponíveis de todo o software:
sudo apt update && sudo apt upgrade -yEste comando atualiza a lista de pacotes local e atualiza qualquer pacote desatualizado já instalado no seu sistema.
Passo 2 — Instalar Nginx
Instalar o Pacote Nginx
Os repositórios padrão do Ubuntu incluem uma versão estável do Nginx. Instale-o com:
sudo apt install nginx -yIniciar o Serviço Nginx
Uma vez instalado, inicie o serviço Nginx imediatamente:
sudo systemctl start nginxAtivar Nginx para Iniciar Automaticamente na Inicialização
Garanta que Nginx seja iniciado automaticamente toda vez que o servidor reiniciar:
sudo systemctl enable nginxVerificar se Nginx Está Executando
Confirme que o serviço está ativo e em execução:
sudo systemctl status nginxVocê deve ver uma saída semelhante a:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...Permitir Nginx Através do Firewall
Se UFW está ativo no seu servidor, permita tráfego HTTP e HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw statusNginx Full abre tanto a porta 80 (HTTP) quanto a porta 443 (HTTPS), ambas necessárias para esta configuração.
Passo 3 — Instalar OpenSSL
HTTP/2 depende de TLS, que por sua vez depende de OpenSSL. Instale-o para garantir que todas as dependências criptográficas estejam disponíveis:
sudo apt install openssl -yVerifique a versão instalada:
openssl versionVocê deve ver uma saída como OpenSSL 3.0.x ou similar. Qualquer versão acima de 1.0.2 suporta totalmente os cipher suites necessários para HTTP/2.
Passo 4 — Obter um Certificado SSL Gratuito com Let’s Encrypt
Let’s Encrypt fornece certificados SSL/TLS gratuitos e automaticamente renováveis confiáveis por todos os navegadores principais. O cliente Certbot torna todo o processo direto.
Instalar Certbot e o Plugin Nginx
sudo apt install certbot python3-certbot-nginx -ySolicitar seu Certificado SSL
Substitua your_domain.com pelo seu nome de domínio registrado real:
sudo certbot --nginx -d your_domain.com -d www.your_domain.comCertbot irá:
- Verificar a propriedade do domínio via um desafio HTTP
- Emitir o certificado do Let’s Encrypt
- Modificar automaticamente sua configuração Nginx para usar o certificado
- Configurar redirecionamentos HTTPS a partir de HTTP
Siga os prompts interativos. Quando perguntado se deve redirecionar tráfego HTTP para HTTPS, selecione opção 2 (Redirecionar) — esta é a escolha recomendada.
Verificar Renovação Automática de Certificado
Os certificados Let’s Encrypt expiram após 90 dias. Certbot instala um trabalho cron ou temporizador systemd para renová-los automaticamente. Teste o processo de renovação com uma execução seca:
sudo certbot renew --dry-runSe nenhum erro aparecer, a renovação automática está configurada corretamente.
> Dica: Para ambientes de produção com múltiplos domínios ou certificados wildcard, considere um Servidor Dedicado para controle completo sobre sua infraestrutura SSL.
Passo 5 — Configurar Nginx para HTTP/2
Agora que SSL está em vigor, você precisa ativar explicitamente HTTP/2 na configuração do bloco de servidor Nginx.
Abrir o Arquivo de Configuração Nginx
A configuração do site padrão está localizada em:
sudo nano /etc/nginx/sites-available/defaultSe você criou um bloco de servidor personalizado para seu domínio (recomendado), abra esse arquivo em vez disso:
sudo nano /etc/nginx/sites-available/your_domain.comAtualizar o Bloco de Servidor para Ativar HTTP/2
Localize a diretiva listen 443 ssl;. Certbot terá adicionado isso automaticamente. Modifique-a para incluir http2:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain.com www.your_domain.com;
# SSL Certificate paths (set by Certbot)
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/your_domain.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP to HTTPS redirect block
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri;
}A mudança crítica está na linha listen: adicionar http2 após ssl ativa o protocolo HTTP/2 para esse host virtual.
Salvar e Sair
Pressione CTRL + X, depois Y, depois Enter para salvar o arquivo e sair do editor nano.
Passo 6 — Otimizar sua Configuração Nginx HTTP/2
Simplesmente ativar HTTP/2 é um bom começo, mas aplicar otimizações adicionais garante que você extraia o máximo desempenho de sua configuração.
Configurações de SSL e Desempenho Recomendadas
Adicione ou verifique as seguintes diretivas dentro do seu bloco server:
# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;
# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# Gzip compression (complements HTTP/2)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;> Nota sobre HTTP/2 e Gzip: HTTP/2 usa sua própria compressão de cabeçalho HPACK, mas ativar Gzip para corpos de resposta ainda fornece economias significativas de largura de banda para ativos baseados em texto.
Passo 7 — Testar a Configuração Nginx
Nunca reinicie Nginx sem primeiro testar a configuração quanto a erros de sintaxe. Um arquivo mal configurado pode derrubar todo o seu servidor web.
Execute o teste de configuração integrado:
sudo nginx -tUm teste bem-sucedido produz:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSe você ver algum erro, revise a saída cuidadosamente. A mensagem de erro incluirá o nome do arquivo e o número da linha onde o problema foi detectado.
Passo 8 — Reiniciar Nginx e Aplicar Alterações
Uma vez que o teste de configuração passa, reinicie Nginx para aplicar todas as alterações:
sudo systemctl restart nginxAlternativamente, se você preferir um recarregamento de tempo zero (que aplica alterações de configuração sem descartar conexões ativas):
sudo systemctl reload nginxPara ativação de HTTP/2 especificamente, um reinício completo é recomendado para garantir que as novas configurações de protocolo sejam totalmente inicializadas.
Passo 9 — Verificar se HTTP/2 Está Ativo
Após reiniciar Nginx, confirme que HTTP/2 está realmente sendo servido aos clientes usando um dos seguintes métodos.
Método 1: Usando curl
A ferramenta de linha de comando curl pode relatar a versão do protocolo usada:
curl -I --http2 https://your_domain.comProcure pelo cabeçalho de resposta:
HTTP/2 200Se você vir HTTP/2 200, HTTP/2 está funcionando corretamente.
Método 2: Usando o Comando OpenSSL
openssl s_client -connect your_domain.com:443 -alpn h2Na saída, procure por:
ALPN protocol: h2h2 é o identificador ALPN para HTTP/2. Se você vir isso, seu servidor está anunciando corretamente o suporte a HTTP/2 durante o handshake TLS.
Método 3: Usando Ferramentas de Desenvolvedor do Navegador
- Abra seu site em Google Chrome ou Mozilla Firefox
- Pressione
F12para abrir Ferramentas de Desenvolvedor - Navegue até a aba Rede
- Recarregue a página (
F5ouCtrl+R) - Clique com o botão direito em qualquer cabeçalho de coluna na lista de requisições e ative a coluna Protocolo
- Você deve ver
h2listado como o protocolo para as requisições do seu domínio
Método 4: Usando uma Ferramenta Online de Teste HTTP/2
Visite https://tools.keycdn.com/http2-test e insira seu domínio. A ferramenta confirmará se HTTP/2 está ativo e fornecerá detalhes adicionais sobre a configuração TLS do seu servidor.
Resolução de Problemas Comuns
HTTP/2 Não Aparecendo no Navegador Apesar da Configuração
- Causa: Navegador armazenou em cache uma conexão HTTP/1.1 mais antiga.
- Solução: Limpe o cache e cookies do navegador, ou teste em uma janela privada/incógnita.
nginx -t Retorna Erros de Certificado SSL
- Causa: Caminhos de certificado incorretos no arquivo de configuração.
- Solução: Verifique os caminhos exatos usando
sudo ls /etc/letsencrypt/live/your_domain.com/e atualize as diretivasssl_certificateessl_certificate_keyde acordo.
Porta 443 Não Acessível
- Causa: Firewall bloqueando tráfego HTTPS.
- Solução: Execute
sudo ufw allow 443/tcpe verifique comsudo ufw status.
Certbot Falha na Validação de Domínio
- Causa: Registro A de DNS ainda não propagado, ou porta 80 está bloqueada.
- Solução: Verifique se seu domínio resolve para o IP correto usando
dig your_domain.com A. Garanta que a porta 80 está aberta para o desafio HTTP ACME.
Erro unknown directive "http2" no Nginx
- Causa: Versão Nginx muito antiga (anterior a 1.9.5) ou compilada sem suporte a
