CONFIGURANDO O APACHE2 DO PRIMEIRO SERVIDOR
Vamos começar instalando o apache2 e algumas libs:
sudo apt-get install apache2 php7.2 libapache2-mod-php7.2
$ sudo apt-get install libapache2-mod-auth-mysql php7.2-mysql
$ sudo apt-get install apache2-prefork-dev
Habilitando os módulos do apache para o redirecionamento e para o proxy pass:
sudo a2enmod env proxy_ajp proxy_balancer proxy proxy_connect proxy_http rewrite ssl headers
Para desabilitar os mods basta usar:
sudo a2dismod [nome-dos-módulos]
Agora iremos criar o arquivo na pasta do apache2:
sudo nano /etc/apache2/sites-available/meuSite
NOTA: no caso se for o Ubuntu 16.04 ou 18.04 precisa colocar o “.conf” no final, ex.: meuSite.conf.
Para habilitar um site utilize o comando:
sudo a2ensite meuSite
e para desabilitar:
sudo a2dissite meuSite
e para reiniciar o apache:
sudo service apache2 reload
e em caso de travamento ou para reiniciá-lo utilizar:
sudo service apache2 restart
Dentro do arquivo meuSite vamos colocar os seguintes itens:
ServerName www.meuDominio.com
RewriteEngine On
RedirectMatch .* https://meuDominio.com/$1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName meuDominio.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
São duas formas diferentes de redirecionamento, e cada uma das duas está redirecionando do http para o https.
Agora vamos fazer o proxy pass, essas linhas farão parte do mesmo arquivo, indo abaixo do </VirtualHost> do segundo redirecionamento:
ServerName meuDominio.com
ServerAlias meuDominio.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
#SSLProxyCheckPeerName off
ProxyPreserveHost On
ProxyPass / http://192.168.2.15:8000/
ProxyPassReverse / http://192.168.2.15:8000/
ProxyVia On
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto ‘https’ env=HTTPS
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
O ip do ProxyPass é o ip do segundo servidor.
Essas duas linhas de SSLCertificate estão aí porque fiz um certificado com o openssl e então deixei elas aí pois o cert-bot irá sobrescrevê-las depois.
Nesse caso estamos utilizando a porta 8000 interna para mandar para o segundo servidor.
Se houver uma mensagem como:
sudo nano /etc/apache2/apache2.conf
Apertar pagedown até a última linha e adicionar:
E reiniciar o Apache:
sudo service apache2 restart
CONFIGURANDO O APACHE2 DO SEGUNDO SERVIDOR
Liberar portas para acesso interno:
sudo nano /etc/apache2/ports.conf
Abaixo do “Listen 80” adicionar “Listen 8000” (ou qualquer outra porta que desejar, ex.: Listen 81, mas como deixamos a 8000 no arquivo do primeiro servidor teremos que deixar a 8000 aqui também, no caso poderíamos até tirar a porta 80).
Feito isso, vamos editar o arquivo do site:
sudo nano /etc/apache2/sites-available/nomeDoSite
Mudar o <VirtualHost *:80> para <VirtualHost *:Porta que foi liberada> ex: <VirtualHost *:8000>.
Mudar o DocumentRoot para a pasta do seu sistema DocumentRoot /CaminhoDoSistema/ e a <Directory /CaminhoDoSistema/> salvar e reiniciar o apache2.
sudo service apache2 restart
Caso o site não esteja ativado, usar o:
sudo a2ensite NomeDoSite
Como utilizamos SSL no arquivo anterior, então o site terá que utilizar o ssl também. Então habilitaremos o mod ssl.
sudo a2enmod ssl
$ sudo service apache2 reload
Se utilizar o ssl (https) terá que colocar um certificado nos dois servidores.
Caso não tenha um certificado e queira utilizar um gratuito, na próxima página iremos instalar um certificado gratuito e automatizar a renovação dele.
INSTALANDO UM CERTIFICADO SSL E AUTOMATIZANDO A RENOVAÇÃO
Entraremos no site do cert-bot e escolheremos as opções do sistema:
No caso colocaremos “I’m using apache on ubuntu”, pois o servidor que estou utilizando é Ubuntu, mas há outras opções.
Baixaremos o software deles e daremos edição de execução:
wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
Agora escolheremos para instalá-lo no Apache:
sudo ./path/to/certbot-auto –apache
Irá pedir para escolher os sites, se quiser todos basta marcar 0 ou poderá escolher o site que quiser. Para o cert-bot funcionar o site precisará estar no ar já, ou seja, funcionando com o domínio certo.
Marcar não para o redirecionamento, pois já fizemos isso no arquivo do primeiro servidor.
Verificar se foi adicionado algumas linhas apontando para o certificado no final do arquivo de configuração do site /etc/apache2/sites-available/meuSite, se sim então está tudo OK.
Para finalizar vamos fazer a renovação, o próprio site do cert-bot da um “script” para renovação:
sudo crontab -e
Colocar no final do crontab:
Nesse caso o certificado será renovado todos os dias à meia noite e meio dia.
Eu utilizo um script muito simples:
cd ~
$ sudo nano renew.sh
sudo ./certbot-auto renew –renew-hook “service apache2 reload” -q >> /home/usuario/certbot-renew.log
exit 0
O -q silencia a saída caso de tenho ocorrido tudo certo.
Caso queira algo como “renovado com sucesso”, apenas coloque um echo “Renovado com sucesso” >> /home/usuario/certbot-renew.log; Salvar e dar permissão de execução:
sudo chmod +x renew.sh
ou
sudo chmod 755 renew.sh
sudo nano crontab -e
Nesse caso o certificado será renovado todo dia à meia noite e zero minutos.
CONCLUSÃO
Esse é um método que eu utilizei quando precisei deixar dois servidores web no mesmo link de internet, precisei fazer isso pois havia apenas um link disponível.
Não posso garantir que esse é o método 100% correto e eficaz, mas quando eu precisei ele veio a calhar muito bem e não deu nenhum problema.