Apontar sub-domínio para outro IP na rede interna

Ubuntu 18.04-20.10

Em algumas situações precisamos que cada um dos subdomínios aponte para um computador diferente na rede, estando um deles como servidor principal.

├── server.domain1.com (192.168.1.80) (master server)
│   └── public_html
├── sub1.domain1.com (192.168.1.81) (raspberry1)
│   └── public_html
├── sub2.domain1.com (192.168.1.82) (raspberry2)
│   └── public_html

Criar Vhost no servidor principal

sudo mkdir -p /var/www/server.domain1.com/public_html
Associar "Owner" e "Group"
sudo chown $user:www-data /var/www/server.domain1.com/public_html
vamos criar também o ficheiro de web que nos permitirá visualizar o conteúdo na pasta
/var/www/server.domain1.com/public_html/index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Welcome to server.domain1.com</title>
  </head>
  <body>
    <h1>Success! server.domain1.com home page!</h1>
  </body>
</html>

Os comandos são executados como root, assim, os atributos dos novos ficheiros criados são root. Para evitar problemas com as permissões, alterar o apache-user para (www-data)

sudo chown -R www-data: /var/www/server.domain1.com

Criar Virtual Hosts

No UBUNTU, o Virtual Host é criado em
/etc/apache2/sites-available são ativados manualmente criando um symlink para

/etc/apache2/sites-enabled 
ou executando o comando a2ensite server.domain1.com

/etc/apache2/sites-available/server.domain1.com.conf

<VirtualHost *:80>
    ServerName server.domain1.com
    ServerAdmin This email address is being protected from spambots. You need JavaScript enabled to view it.
    DocumentRoot /var/www/server.domain1.com/public_html

    <Directory /var/www/server.domain1.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/server.domain1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/server.domain1.com-access.log combined
</VirtualHost>

Depois de criado o vhost, temos de ativar criando um symlink para sites enable ou executando comando

sudo a2ensite server.domain1.com

Criar sub para outro ips

Para criar subs para outro ips vamos usar o proxypass e criar um Vhost no server.domain1.com

Instalar no servidor

 
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests

Configurar o vhost para o sub domínio

/etc/apache2/sites-available/sub1.domain1.com.conf

<VirtualHost *:80>
    ServerName sub1.domain1.com
    ServerAdmin This email address is being protected from spambots. You need JavaScript enabled to view it.
                ProxyPreserveHost On
                ProxyRequests Off
                ProxyPass / http://192.168.1.81/
                ProxyPassReverse  / http://192.168.1.81/

    
    ErrorLog ${APACHE_LOG_DIR}/sub1.domain1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/sub1.domain1.com-access.log combined
</VirtualHost>

e, depois de criado, vamos ativar com

sudo a2ensite sub1.domain1.com

SSL Certificate

Mesmo que tenhamos criado um ssl para o domínio principal noutro servidor e os respetivos certificados para os subdominios, temos sempre de criar os nosso certificados, para isso usamos o certbot que nos gera um certificado gratuito "Let'sEncrypt". Instalar certbot. Na pasta /etc/apache2/sites-available é criado automaticamente um ficheiro de configuração para o domínio com ssl e com a porta 443.