Como Habilitar o HTTP/2 no Apache no Ubuntu

Desde a criação da World Wide Web (www), o protocolo HTTP evoluiu ao longo dos anos para fornecer conteúdo digital seguro e rápido pela internet.

A versão mais amplamente utilizada é o HTTP 1.1 e, embora contenha aprimoramentos de recursos e otimizações de desempenho para lidar com as deficiências das versões anteriores, ele fica aquém de algumas outras características importantes que foram abordadas 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 cabeçalhos HTTP longos.
  2. O 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 uma enxurrada de conexões TCP paralelas para processar as solicitações simultaneamente. Isso leva à congestão TCP e, em última instância, ao desperdício de largura de banda e degradação da rede.

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

Vantagens de Usar o HTTP/2

Ele oferece as seguintes vantagens:

  1. Compressão de cabeçalho que minimiza as solicitações do cliente e, assim, reduz o consumo de largura de banda. O efeito resultante são velocidades rápidas de carregamento de páginas.
  2. Multiplexando 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 reagrupá-los no outro extremo.
  3. Desempenhos web mais rápidos que consequentemente levam a uma melhor classificação de SEO.
  4. Segurança aprimorada, uma vez que a maioria dos navegadores populares carrega o HTTP/2 sobre HTTPS.
  5. O HTTP/2 é considerado mais amigável para dispositivos móveis graças à funcionalidade de compressão de cabeçalho.

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

Pré-requisitos:

Antes de começar, certifique-se de habilitar o HTTPS no servidor web Apache antes de habilitar o HTTP/2. Isso ocorre porque todos os navegadores web populares suportam o HTTP/2 sobre 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 um certificado Let’s Encrypt.

Também é recomendado ter o Apache 2.4.26 e versões posteriores para servidores de produção que pretendem migrar para o HTTP/2.

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

$ apache2 -v
Check Apache Version in Ubuntu

A partir da saída, você pode ver que estamos usando a versão mais recente, que é Apache 2.4.41 no momento da redação deste artigo.

Ative o HTTP/2 em um Virtual Host do Apache

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

Confirm HTTP Protocol Version

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

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

Em seguida, localize e edite o arquivo de virtual host SSL, se você tiver habilitado o HTTPS usando o Let’s Encrypt, um novo arquivo é criado com um sufixo le-ssl.conf.

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

Insira a diretiva abaixo após a tag <VirtualHost *:443>.

Protocols h2 http/1.1
Enable HTTP/2 on Apache

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

$ sudo systemctl restart apache2

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

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

Você deve obter a saída mostrada.

HTTP/2 200

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

Confirm HTTP/2 Protocol Version

Ao Usar o Módulo mod_php com o Apache

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

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

$ sudo a2dismod php7.4 
Disable mod_php Module

Em seguida, desative o módulo prefork MPM.

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

Após desativar os módulos, em seguida, ative os módulos Event MPM, Fast_CGI e setenvif conforme mostrado.

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

Instale o 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

Depois, habilite o PHP-FPM como manipulador PHP do Apache e reinicie o servidor web Apache para que as alterações tenham efeito.

$ sudo a2enconf php7.4-fpm

Habilitar 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

Por fim, 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
Check HTTP/2 Protocol in Apache

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 habilitar confortavelmente o HTTP/2 no Apache com facilidade.

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/