Recentemente publiquei um artigo que mostrava como instalar o Nginx com suporte a HTTP/2 habilitado. Agora é a vez do bom e velho Apache! A release estável 2.4.17 do Apache foi lançada em 13 de outubro de 2015 e vem com um novo módulo que vai deixar todo mundo animado: claro que falo do mod_http2, que dá suporte ao HTTP/2 no Apache. Para saber o que mais vem nessa release, leia a página de Announcement.
Assim como no Nginx, fizemos uma imagem Docker para o Apache com HTTP/2 que utiliza um Ubuntu 14.04. Veja nosso Dockerfile no Github clicando aqui.
Caso queira utilizar o Docker, baixe a imagem e execute-a utilizando os comandos abaixo. Troque /caminho/do/meu-site/ pelo caminho absoluto para a pasta do seu site.

$ docker pull devopsbluesoft/httpd-h2
$ docker run -d -p 8443:443 -v /caminho/do/meu-site/:/usr/local/httpd/htdocs/ devopsbluesoft/httpd-h2

Seu site estará disponível em https://localhost:8443. Troque localhost pelo IP da máquina onde o Docker foi executado.
Se você quiser fazer na mão, siga os passos a seguir.
Atualize seus pacotes e instale as dependências do Apache.

$ sudo apt-get -y update
$ sudo apt-get -y upgrade
$ sudo apt-get -y install gcc g++ wget libpcre3-dev make

Agora você vai baixar vários pacotes de que o Apache depende. É possível instalar os pacotes -dev dos repositórios do Ubuntu, mas preferi compilar as versões mais recentes.
Baixando o Apache APR.

$ mkdir -p $HOME/src/
$ wget -O $HOME/src/apr-1.5.2.tar.gz http://ftp.unicamp.br/pub/apache/apr/apr-1.5.2.tar.gz
$ tar xzf $HOME/src/apr-1.5.2.tar.gz -C $HOME/src/

Baixando o Apache APR-Util.

$ wget -O $HOME/src/apr-util-1.5.4.tar.gz http://ftp.unicamp.br/pub/apache//apr/apr-util-1.5.4.tar.gz
$ tar xzf $HOME/src/apr-util-1.5.4.tar.gz -C $HOME/src/

Baixando o nghttp2 (implementação do protocolo HTTP/2 utilizada pelo Apache).

$ wget -O $HOME/src/nghttp2-1.3.4.tar.gz https://github.com/tatsuhiro-t/nghttp2/releases/download/v1.3.4/nghttp2-1.3.4.tar.gz
$ tar xzf $HOME/src/nghttp2-1.3.4.tar.gz -C $HOME/src/

Baixando o OpenSSL (é necessário usar a versão 1.0.2 ou superior).

$ wget -O $HOME/src/openssl-1.0.2d.tar.gz ftp://ftp.openssl.org/source/openssl-1.0.2d.tar.gz
$ tar xzf $HOME/src/openssl-1.0.2d.tar.gz -C $HOME/src/

E, por último, o Apache 2.4.17.

$ wget -O $HOME/src/httpd-2.4.17.tar.gz http://ftp.unicamp.br/pub/apache//httpd/httpd-2.4.17.tar.gz
$ tar xzf $HOME/src/httpd-2.4.17.tar.gz -C $HOME/src/

Agora vamos compilar todos os pacotes, começando pelo Apache APR.

$ cd $HOME/src/apr-1.5.2/
$ ./configure --prefix=/usr/local/apr/
$ make
$ sudo make install

Compilando o Apache APR-Util.

$ cd $HOME/src/apr-util-1.5.4/
$ ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/
$ make
$ sudo make install

Compilando o nghttp2.

$ cd $HOME/src/nghttp2-1.3.4/
$ ./configure --prefix=/usr/local/nghttp2/
$ make
$ sudo make install

Compilando o OpenSSL.

$ cd $HOME/src/openssl-1.0.2d/
$ ./config --prefix=/usr/local/openssl/
$ make
$ sudo make install

E aí é só compilar o Apache.

$ cd $HOME/src/httpd-2.4.17/
$ ./configure --prefix=/usr/local/httpd/ --enable-http2 --enable-http --enable-ssl --enable-ssl-staticlib-deps --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-nghttp2=/usr/local/nghttp2/ --with-ssl=/usr/local/openssl/ --enable-mods-static=ssl
$ make
$ sudo make install

Crie a chave e o certificado SSL.

$ mkdir /usr/local/httpd/conf/ssl
$ openssl genrsa -out /usr/local/httpd/conf/ssl/server.key 2048
$ openssl req -subj "/C=BR/ST=SP/L=São Paulo/O=Acme, Inc./OU=DevOps" -new -key /usr/local/httpd/conf/ssl/server.key -out /usr/local/httpd/conf/ssl/server.csr
$ openssl x509 -req -days 365 -in /usr/local/httpd/conf/ssl/server.csr -signkey /usr/local/httpd/conf/ssl/server.key -out /usr/local/httpd/conf/ssl/server.crt

Copie os arquivos de configuração do Apache.

$ wget https://raw.githubusercontent.com/bluesoft/dockerfiles/master/httpd-h2/httpd.conf.docker
$ wget https://raw.githubusercontent.com/bluesoft/dockerfiles/master/httpd-h2/httpd-vhost.conf.docker
$ sudo mv httpd.conf.docker /usr/local/httpd/conf/httpd.conf
$ sudo mv httpd-vhost.conf.docker /usr/local/httpd/conf/extra/httpd-vhosts.conf

Copie o seu site para /usr/local/httpd/htdocs/.

$ mkdir -p /usr/local/httpd/htdocs/
$ sudo cp -R meu-site/* /usr/local/httpd/htdocs/

Remova os arquivos baixados.

$ rm -r $HOME/src/*

Inicie o Apache.

$ /usr/local/httpd/bin/httpd -k start

Acesse seu site pelo link https://localhost. Troque localhost pelo IP da máquina onde o Apache foi instalado.
Veja se o site está negocionando o protocolo HTTP2 utilizando o SPDY indicator, para Firefox, ou o Chrome SPDY indicator, para o Chrome.
Agora você tem o HTTP/2 no Apache!
Gostou deste post? Deixe um comentário.
Até a próxima!

Autor

Ismael Soares é Gerente de Engenharia de Software na Bluesoft em São Paulo. É formado em banco de dados pela Faculdade Impacta de Tecnologia e possui mais de 14 anos com experiências em análise e desenvolvimento de sistemas. Já trabalhou com diversas tecnologias, entre elas: VB6, ASP, PHP, C#.NET, VB.NET, ASP.NET, PL/SQL, T-SQL, Groovy, Ruby e Java. Já participou de diversos projetos com banco de dados entre eles: Oracle, MSSQL Server, MySQL e Postgree.

Deixe aqui o seu comentário