Pesquisa de site

Como habilitar HTTP/2 no Apache no Ubuntu


Desde o início da World Wide Web (www), o protocolo HTTP evoluiu ao longo dos anos para fornecer conteúdo digital seguro e rápido através do Internet.

A versão mais usada é o HTTP 1.1 e, embora inclua melhorias de recursos e otimizações de desempenho para resolver as deficiências das versões anteriores, fica aquém de alguns outros recursos importantes que foram abordados pelo >HTTP/2.

Quais são as limitações do HTTP/1.1?

O protocolo HTTP/1.1 está repleto das seguintes deficiências que o tornam menos ideal, especialmente ao executar servidores web de alto tráfego:

  1. Atrasos no carregamento de páginas da web devido a longos cabeçalhos HTTP.
  2. HTTP/1.1 só é capaz de enviar uma solicitação para cada arquivo por conexão TCP.
  3. Dado que o HTTP/1.1 processa uma solicitação para cada conexão TCP, os navegadores são forçados a enviar um dilúvio de conexões TCP paralelas para processar simultaneamente as solicitações. Isso leva ao congestionamento do TCP e, em última análise, ao desperdício de largura de banda e à degradação da rede.

Os problemas mencionados acima geralmente levam à degradação do desempenho e a altos custos indiretos no uso da largura de banda. HTTP/2 entrou em cena para resolver esses problemas e agora é o futuro dos protocolos HTTP.

Vantagens de usar HTTP/2

Oferece as seguintes vantagens:

  1. Compressão de cabeçalho que minimiza as solicitações do cliente e, portanto, reduz o consumo de largura de banda. O efeito resultante são velocidades rápidas de carregamento de página.
  2. Multiplexar várias solicitações em uma conexão TCP. Tanto o servidor quanto o cliente podem dividir uma solicitação HTTP em vários quadros e reagrupar-los na outra extremidade.
  3. Desempenhos web mais rápidos que consequentemente levam a uma melhor classificação de SEO.
  4. Segurança aprimorada, já que a maioria dos navegadores convencionais carrega HTTP/2 sobre HTTPS.
  5. HTTP/2 é considerado mais compatível com dispositivos móveis graças ao recurso de compactação de cabeçalho.

Dito isso, vamos ativar o HTTP/2 no Apache no Ubuntu 20.04 LTS e no Ubuntu 18.04 LTS.

Pré-requisitos:

Antes de começar, certifique-se de ativar o HTTPS no servidor web Apache antes de ativar o HTTP/2. Isso ocorre porque todos os navegadores convencionais suportam HTTP/2 em vez de HTTPS. Eu tenho um nome de domínio apontado para uma instância no Ubuntu 20.04 que está executando o servidor Apache protegido usando o certificado Let’s Encrypt.

Além disso, é recomendado que você tenha o Apache 2.4.26 e versões posteriores para servidores de produção que pretendem migrar para HTTP/2.

Para verificar a versão do Apache que você está executando, execute o comando:

apache2 -v

Pelo resultado, você pode ver que estamos usando a versão mais recente, que é Apache 2.4.41 no momento em que este artigo foi escrito.

Habilite HTTP/2 em um host virtual Apache

Para começar, primeiro confirme se o servidor web está executando HTTP/1.1. Você pode fazer isso em um navegador abrindo a seção de ferramentas do desenvolvedor no Google Chrome usando a combinação Ctrl +SHIFT + I. Clique na guia ‘Rede’ e localize a coluna ‘Protocolo’.

Em seguida, habilite o módulo HTTP/2 no Ubuntu executando o seguinte comando.

sudo a2enmod http2

Em seguida, localize e edite seu arquivo host virtual SSL. Se você ativou HTTPS usando Let's Encrypt, um novo arquivo será criado com um le-ssl.conf sufixo.

sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

Insira a diretiva abaixo após a tag .

Protocols h2 http/1.1

Para salvar as alterações, reinicie o servidor web Apache.

sudo systemctl restart apache2

Para verificar se HTTP/2 está ativado, busque os cabeçalhos HTTP usando o seguinte comando curl como mostrado.

curl -I --http2 -s https://domain.com/ | grep HTTP

Você deve obter a saída mostrada.

HTTP/2 200

No navegador, recarregue seu site. Em seguida, volte para as ferramentas do desenvolvedor e confirme o HTTP/2 indicado pelo rótulo h2 na coluna ‘Protocolo’.

Ao usar o módulo mod_php com Apache

Se você estiver executando o Apache junto com o módulo mod_php, você precisará mudar para o PHP-FPM. Isso ocorre porque o módulo mod_php usa o módulo pré-fork MPM que não é suportado pelo HTTP/2. Você precisa desinstalar o pré-fork MPM e mudar para o módulo mpm_event que será suportado por HTTP/2.

Se você estiver usando o módulo PHP 7.4 mod_php, por exemplo, desative-o conforme mostrado:

sudo a2dismod php7.4 

Depois disso, desative o módulo MPM do pré-fork.

sudo a2dismod mpm_prefork

Depois de desabilitar os módulos, em seguida, habilite os módulos Event MPM, Fast_CGI e setenvif conforme mostrado.

sudo a2enmod mpm_event proxy_fcgi setenvif

Instale PHP-FPM no Ubuntu

Em seguida, instale e inicie o PHP-FPM conforme mostrado.

sudo apt install php7.4-fpm 
sudo systemctl start php7.4-fpm

Em seguida, habilite o PHP-FPM para iniciar no momento da inicialização.

sudo systemctl enable php7.4-fpm

Em seguida, habilite PHP-FPM como manipulador PHP do Apache e reinicie o servidor web Apache para que as alterações sejam efetuadas.

sudo a2enconf php7.4-fpm

Habilite o suporte HTTP/2 no Apache Ubuntu

Em seguida, habilite o módulo HTTP/2 como antes.

sudo a2enmod http2

Reinicie o Apache para sincronizar todas as alterações.

sudo systemctl restart apache2

Finalmente, você pode testar se o seu servidor está usando o protocolo HTTP/2 usando o comando curl conforme mostrado.

curl -I --http2 -s https://domain.com/ | grep HTTP

Você também pode optar por usar as ferramentas do desenvolvedor no navegador Google Chrome para verificar conforme documentado anteriormente. Chegamos ao final deste guia. Esperamos que você tenha achado as informações valiosas e que possa ativar o HTTP/2 no Apache com facilidade.