Como habilitar HTTP/2 no Apache Debian 9?

Introdução

As notas de lançamento do Debian 9 (Stretch) anunciaram uma grande atualização interessante entre as outras: Apache 2.4.25.

Mas por que “interessante”? Principalmente porque foi a primeira versão contendo um pacote Apache> = 2.4.17, a versão dinâmica que apresenta suporte a HTTP / 2 ( SPDY ), com mod_http2.

Se você ainda está se perguntando se seus servidores web ou proxies reversos devem oferecer esse protocolo, convido você a ler este famoso FAQ .

Dica profissional: você já se perguntou por que o Google ou o YouTube são tão rápidos?

No final deste post, você terá (espero) um Apache rodando com HTTP/2 habilitado.

Procedimento de configuração

Um novo módulo, uma nova configuração

Antes de mais nada, vamos verificar se você está executando uma versão decente do Apache para HTTP/2:

# apache2ctl -v

Precisa mostrar para você uma versão superior a esta: (Caso seja inferior, por favor, atualize seu Apache ou não vai funcionar!)

Server version: Apache/2.4.25 (Debian)

Agora, vamos habilitar o mod_http2módulo apresentado acima:

# a2enmod http2

Antes de reiniciar o Apache (como a saída do comando acaba de avisá-lo), indicaremos o uso do novo protocolo por meio da configuração (como bons administradores de sistema, preservaremos a modularidade):

# nano /etc/apache2/conf-available/http2.conf

… E copie e cole esta configuração em seu vHost:

<IfModule http2_module>
    Protocols h2 h2c http/1.1
    H2Direct On
</IfModule>

Se você tiver dúvida em como configurar seu vHost, leia este artigo que preparamos para você e apenas acrescente a informação acima no seu vHost abaixo de <VirtualHost *:443> no seu arquivo.conf.

E aqui, só precisamos habilitar nossa nova configuração:

# a2enconf http2

Dica profissional: a configuração acima habilitaria HTTP/2 globalmente .
Se você quiser habilitá-lo apenas para um VHOST específico, cole a configuração acima diretamente dentro dele!

Dica profissional 2: h2é para HTTP / 2 sobre TLS & ALPN, e h2cé para negociação HTTP / 2 de texto não criptografado (normalmente você não vai precisar, mas quem sabe? Já deixa preparado).

Então, agora, você já poderia reiniciar seu servidor web ( # systemctl restart apache2) e verificar os resultados, mas não o faremos agora pelo seguinte motivo: O módulo mpm (prefork.c) não é compatível com mod_http2. O mpm determina como as coisas são processadas em seu servidor. HTTP/2 tem mais demandas a esse respeito e o mpm selecionado atualmente simplesmente não servirá. Este é um aviso informativo. Seu servidor continuará a funcionar, mas o protocolo HTTP/2 ficará inativo.

O problema do MPM

O Apache 2.4 funciona por padrão com o módulo prefork MPM, que significa Multi-Processing Module prefork module. E adivinha? O MPM não é compatível com HTTP/2.

Então, como realmente queremos oferecer HTTP/2, usaremos o interpretador FPM do PHP (que significa FastCGI Process Manager ) que é … compatível com HTTP/2!

A “solução” FPM

Abaixo está a receita a seguir (veja as fontes no final da postagem):

  1. Instale o pacote FPM do PHP (presumo aqui que você manteve a versão oficial do Stretch PHP ): Então primeiro veja qual é a versão seu PHP utilizando. o seguinte comando: # php-v caso seja por exemplo a versão 7.4-* então você vai digitar # apt install php7.4-fpm
  2. Habilite alguns módulos obrigatórios: # a2enmod proxy_fcgi setenvif
  3. Ative a nova configuração FPM do PHP: # a2enconf php7.4-fpm
  4. Desative os módulos antigos que não serão mais usados: # a2dismod php7.4 mpm_prefork
  5. Ative o módulo MPMevent, em substituição a prefork:# a2enmod mpm_event

Agora sim recomendo você pode reiniciar seu servidor web com maior certeza que funcionará.

# systemctl restart apache2

Hora de verificação!

Nesta etapa, presumo que você aplicou a configuração HTTP/2 acima e reiniciou corretamente o Apache!

curlConsultas básicas

Com um curl, presumindo que tenha sido compilado com o módulo HTTP/2, é claro, você pode facilmente verificar se o HTTP/2 está sendo (ou será) usado:

$ curl -v https://www.seudominio.com.br/

Apenas observe a versão HTTP escrita junto com verbos ou códigos de status.
Para um HTTPS VHOST, observe os pontos abaixo:

[...]
* ALPN, offering h2
* ALPN, offering http/1.1
[...]
* ALPN, server accepted to use h2
[...]
* Using HTTP2, server supports multi-use
[...]
> GET / HTTP/2
[...]
< HTTP/2 200
[...]

Afim de facilitar o seu entendimento abaixo eu destaquei em vermelho os pontos a serem observados se mostra em seu Putty, Terminal… seja lá o que for, SSH:

 

Também tem essa ferramenta muito útil e disponível para acessar de qualquer lugar que é: https://http2.pro/ permitindo que você verifique remotamente se o HTTP/2 está ativo e funcionando em seu domínio. Também é capaz de verificar se ALPN e PUSH estão rodando corretamente.

 

Clique no link e digite o seu domínio para um teste.

Avatar photo
Escrito por:

Ely Ezer

Após anos gerenciando milhares de reais investidos todos os anos em Tráfego Pago impulsionando diversas empresas e negócios de pequeno a grande porte, decidi compartilhar gratuitamente parte deste conhecimento focado para alavancar as vendas do seu negócio utilizando das técnicas e ferramentas mais eficientes do marketing digital.

Ver todos os posts

Send this to a friend