Pular para o conteúdo principal

Compilando e Configurando o APACHE 2.4 com HTTP/2 e HTTPS

Este passo-a-passo tem como objetivo a configuração do Debian Linux com as versões mais atuais dos programas necessários para rodar um servidor Apache 2.4 com o uso de HTTP/2 e HTTPS.
Sistema Operacional utilizado:
- Debian 8 (Jessie) 64bits, minimal install - versão mínima do Debian, sem recursos gráficos ou desnecessários, somente o que realmente será utilizado.

1) Passos Iniciais
Atualização do sistema e instalação de pacotes necessários
sudo apt-get update && sudo apt-get upgrade  
sudo apt-get install autoconf automake gcc libzip-dev bison autoconf build-essential pkg-config git-core libltdl-dev libbz2-dev libxml2-dev libxslt1-dev libssl-dev libicu-dev libpspell-dev libenchant-dev libmcrypt-dev libpng-dev libfreetype6-dev libmysqlclient-dev libreadline-dev libcurl4-openssl-dev libjpeg62-turbo-dev libtool-bin libexpat1-dev  
2) Compilar e Instalar OpenSSL 1.1.x
wget http://www.openssl.org/source/openssl-1.1.0h.tar.gz --no-check-certificate  
tar -zxvf openssl-1.1.0h.tar.gz   
cd openssl-1.1.0h  
./config shared zlib --prefix=/usr/local/openssl --openssldir=/usr/local/openssl -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)'  
make
make test  
sudo make install  
sudo ldconfig /usr/local/openssl/lib/  
cd ..
3) Compilar e Instalar APR (pacote necessário para ativar o HTTP/2)
wget http://www-us.apache.org/dist//apr/apr-1.6.3.tar.gz  
tar -zxvf apr-1.6.3.tar.gz  
cd apr-1.6.3  
./configure --prefix=/usr/local/apr/
make  
sudo make install  
cd ..
4) Compilar e Instalar APR-UTILS (pacote necessário para ativar o HTTP/2)
wget http://www-eu.apache.org/dist//apr/apr-util-1.6.1.tar.gz  
tar -zxvf apr-util-1.6.1.tar.gz  
cd apr-util-1.6.1  
./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/
make  
sudo make install  
cd..
5) Compilar e Instalar NGHTTP2 - HTTP/2 C Library https://github.com/nghttp2/nghttp2
wget https://github.com/nghttp2/nghttp2/releases/download/v1.32.0/nghttp2-1.32.0.tar.gz --no-check-certificate  
tar -zxvf nghttp2-1.32.0.tar.gz  
cd nghttp2-1.32.0  
export OPENSSL_CFLAGS="-I/usr/local/openssl/include"  
export OPENSSL_LIBS="-L/usr/local/openssl/lib -lssl -lcrypto"  
./configure --prefix=/usr/local/nghttp2/
make  
sudo make install  
cd ..
6) Compilar e Instalar Apache 2.4
Se a versão especificada no wget der erro 404 verifique a versão atual disponível em https://httpd.apache.org/download.cgi
wget http://www-us.apache.org/dist//httpd/httpd-2.4.34.tar.gz
tar -zxvf httpd-2.4.34.tar.gz
cd httpd-2.4.34
./configure --prefix=/usr/local/apache/ --enable-ssl=shared  --enable-so --enable-http2 --enable-rewrite --enable-imagemap --enable-vhost-alias --with-mpm=event --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-nghttp2=/usr/local/nghttp2/ --with-ssl=/usr/local/openssl/ 
make
sudo make install
cd ..
7) Adicionar entrada de controle do Apache ao comando systemctl
Crie o arquivo /etc/systemd/system/apache.service com o conteúdo abaixo:
#### INICIO
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl -k start
ExecReload=/usr/local/apache/bin/apachectl -k graceful
ExecStop=/usr/local/apache/bin/apachectl -k graceful-stop
PIDFile=/usr/local/apache/logs/httpd.pid
PrivateTmp=true
[Install]
WantedBy=multi-user.target
### FIM
Execute os seguintes comandos para ativar a configuração e testar se está tudo funcionando:
sudo systemctl daemon-reload
sudo systemctl enable apache
sudo systemctl start apache
8) Criar Usuário e Grupo para o Apache
sudo groupadd www
sudo useradd apache -g www --no-create-home --shell /sbin/nologin
9) Configuração do Apache
Antes de tudo faça um backup do arquivo de configuração original
sudo cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.original
Abra o arquivo /usr/local/apache/conf/httpd.conf e faça todas as instruções que seguem.

Procure pela linha ServerRoot "/usr/local/apache/" e adicione logo abaixo as seguintes linhas:
Protocols h2 h2c http/1.1
User apache
Group www
Descomente as seguintes linhas de módulos:
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so
LoadModule rewrite_module modules/mod_rewrite.so
Altere o bloco que inicia com <ifmodule unixd_module> alterando para o usuário e grupo criados anteriormente:
User apache
Group www
Descomente e altere a linha ServerName para o nome que deseja para o servidor
Ex:
ServerName MeuWebSite
Procure o bloco que inicia com <ifmodule dir_module> e substitua todo o bloco por:
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

    <IfModule dir_module>
        DirectoryIndex index.php index.html
    </IfModule>
</IfModule>
Procure e descomente as linhas deixando de acordo com o que segue:
# Server-pool management (MPM specific)
Include conf/extra/httpd-mpm.conf

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
Adicione no final do arquivo a seguinte linha:
Include conf/extra/httpd-vhosts.conf
10) Configurar o uso de SSL no Apache
Faça backup do arquivo httpd-ssl.conf:
sudo cp /usr/local/apache/conf/extra/httpd-ssl.conf /usr/local/apache/conf/extra/httpd-ssl.conf.original
Abra o arquivo /usr/local/apache/conf/extra/httpd-ssl.conf e remova todo o bloco que inicia com <VirtualHost _default_:443> até o fim
##
## SSL Virtual Host Context
##
daqui em diante apague todo o bloco...
Salve o arquivo e feche o editor.
Renomeie o arquivo httpd-vhosts.conf:
sudo mv /usr/local/apache/conf/extra/httpd-vhosts.conf /usr/local/apache/conf/extra/httpd-vhosts.conf.original
Crie um novo arquivo httpd-vhosts.conf vazio e insira o seguinte conteúdo:
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerName 192.168.46.150
                DocumentRoot "/usr/local/apache/htdocs/"
                <Directory /usr/local/apache/htdocs/>
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride None
                        Require all granted
                </Directory>
                SSLEngine on
                SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SH
                SSLProtocol TLSv1 TLSv1.1 TLSv1.2
                SSLCertificateFile /usr/local/apache/conf/ssl/server.crt
                SSLCertificateKeyFile /usr/local/apache/conf/ssl/server.key
                ErrorLog "/usr/local/apache/htdocs/logs/error_log"
                CustomLog "/usr/local/apache/htdocs/logs/access_log" common
        </VirtualHost>
</IfModule>
Altere a linha ServerName para o ip utilizado, salve e feche o arquivo
Crie a pasta onde serão salvos os logs do localhost
mkdir /usr/local/apache/htdocs/logs/
Crie a pasta /usr/local/apache/conf/ssl/ e vá para ela
sudo mkdir /usr/local/apache/conf/ssl/
cd /usr/local/apache/conf/ssl/
logo após execute os seguintes comandos para gerar a chave privada e o certificado a serem utilizados:
sudo openssl genrsa -out server.key 2048
sudo openssl req -new -key server.key -out server.csr
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
11) Testando as configurações
Reinicie o Apache
sudo systemctl restart apache
Se não houve nenhum erro ao executar o comando acima, então você já pode tentar abrir o ip no navegador com https.

Caso esteja utilizando o Chrome, precisará ativar o https para redes locais. Para isso, basta abrir o Chrome e colar na barra de endereços a seguinte instrução: chrome://flags/#allow-insecure-localhost
Selecionar Enabled e reiniciar o navegador.

Para testar o uso do HTTP/2 você pode utilizar a extensão HTTP/2 and SPDY indicator no Chrome.
Pronto! Você esta rodando um servidor Apache 2.4 com HTTPS e HTTP/2:






Veja aqui como Criar Virtual Host no Apache Instalado Via Compilação.

Comentários