CONFIGURANDO O APACHE PARA DEIXAR DOIS SERVIDORES WEB NO MESMO LINK

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:

<VirtualHost *:80>
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:

<VirtualHost *:443>
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:

apache2: Could not determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName.É só colocar ServerName localhost no final do apache2.conf:

 sudo nano /etc/apache2/apache2.conf

Apertar pagedown até a última linha e adicionar:

ServerName localhost

E reiniciar o Apache:

 sudo service apache2 restart

 

CONFIGURANDO O APACHE2 DO SEGUNDO SERVIDOR

 

Iremos configurar o segundo servidor agora, começaremos configurando as portas.

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

 

Vamos utilizar um certificado gratuito do cert-bot.

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:

0 0,12 * * * python -c ‘import random; import time; time.sleep(random.random() * 3600)’ && ./path/to/certbot-auto renew

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

#!/bin/bash
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

0 0 * * * /home/Usuario/renew.sh

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.

REFERÊNCIAS

Rolar para cima