The Blog

Configurando servidores virtuais no Linux Ubuntu


Relacionei a lista de comandos e uma breve explicação da função do comando. Essa configuração foi realizada no Linux Ubuntu no servidor da DigitalOcean para adicionar novos sites (domínios) em uma máquina virtual contratada.

Não esqueça de registrar o domínio para chamar no IP do seu servidor. Para atribuir o domínio ao projeto no DigitalOcean, acesse o menu ‘Networking’ e adicione um registro do tipo A com os dados do seu domínio.

Note que no exemplo abaixo eu registrei dois domínios: site-exemplo e site-exemplo2. Troque os nomes pelo [domínio] do seu site.

Arquivos de configuração dos servidores virtuais:

/etc/apache2/sites-available/000-default-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost

        ServerName site-exemplo.com.br
        ServerAlias www.site-exemplo.com.br

        DocumentRoot /var/www/html/site-exemplo

        <Directory /var/www/html/site-exemplo>
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

         ErrorLog ${APACHE_LOG_DIR}/error_site-exemplo.log
         CustomLog ${APACHE_LOG_DIR}/access_site-exemplo.log combined

         ServerAlias site-exemplo.com.br
         ServerAlias www.site-exemplo.com.br
</VirtualHost>

<VirtualHost *:443>
        ServerAdmin webmaster@localhost

        ServerName site-exemplo2.com.br
        ServerAlias www.site-exemplo2.com.br

        DocumentRoot /var/www/html/site-exemplo2

        <Directory /var/www/html/site-exemplo2>
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

         ErrorLog ${APACHE_LOG_DIR}/error_site-exemplo2.log              
         CustomLog ${APACHE_LOG_DIR}/access_site-exemplo2.log combined

         ServerAlias site-exemplo2.com.br
         ServerAlias www.site-exemplo2.com.br
</VirtualHost>
</IfModule>

/etc/apache2/sites-available/000-default.conf

# Added to mitigate ABC-2020-1234 vulnerability
UseCanonicalName On

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        
        ServerName site-exemplo.com.br
        ServerAlias www.site-exemplo.com.br

        DocumentRoot /var/www/html/site-exemplo
        
        <Directory /var/www/html/site-exemplo>
            Options FollowSymLinks
            AllowOverride All
            Require all granted
       </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error_site-exemplo.log
        CustomLog ${APACHE_LOG_DIR}/access_site-exemplo.log combined
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.site-exemplo.com.br [OR]
        RewriteCond %{SERVER_NAME} =site-exemplo.com.br
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName site-exemplo2.com.br
        ServerAlias www.site-exemplo2.com.br
        DocumentRoot /var/www/html/site-exemplo2

        <Directory /var/www/html/site-exemplo2>
                Options FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error_site-exemplo2.log
        CustomLog ${APACHE_LOG_DIR}/access_site-exemplo2.log combined
         RewriteEngine on
         RewriteCond %{SERVER_NAME} =www.site-exemplo2.com.br [OR]
         RewriteCond %{SERVER_NAME} =site-exemplo2.com.br
         RewriteRule ˆ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Comando para gerar certificado SSL para HTTPS:

sudo certbot --apache -d [domínio] -d www.[domínio]

Diretório dos arquivos de validação do certificado:

/etc/letsencrypt/live/[domínio]

As seguintes linhas serão adicionadas dentro das tags <VirtualHost> no seu arquivo 000-default-le-ssl.conf:

         Include /etc/letsencrypt/options-ssl-apache.conf
         SSLCertificateFile /etc/letsencrypt/live/site-exemplo.com.br/fullchain.pem
         SSLCertificateKeyFile /etc/letsencrypt/live/site-exemplo.com.br/privkey.pem

Não se esqueça de criar os diretórios ‘/var/www/html/site-exemplo’ e ‘/var/www/html/site-exemplo2’ com as permissões 775 para diretórios e 664 para arquivos.

Comando para criar e redefinir permissões de pastas:

mkdir /var/www/html/site-exemplo
echo "Hello World" | tee /var/www/html/site-exemplo/index.html
find /var/www/html/site-exemplo -type d -exec chmod 775 {} \;
find /var/www/html/site-exemplo -type f -exec chmod 664 {} \;

Comando para reiniciar o servidor Apache:

sudo service apache2 restart

Caso você tenha alguma mensagem de erro, tente parar o servidor apache e iniciá-lo novamente. Deixe nos comentários suas dúvidas e se funcionou pra você.

DICA É possível criar um arquivo para cada site, mantendo sempre as tags <VirtualHost> e <IfModule> (no caso do arquivo 000-default-le-ssl.conf) conforme nos exemplos acima.

Será necessário executar o comando ‘a2dissite 000-default.conf’ e ‘a2dissite default-ssl-conf’ para desvincular esses arquivos da pasta ‘/etc/apache2/sites-enabled/’.

Não se esqueça de adicionar os novos com o comando ‘a2ensite site-exemplo.conf’. Os arquivos ‘.conf’ da pasta sites-available precisam estar dentro da pasta sites-enabled, caso não estejam execute o seguinte comando ‘ln -s /etc/apache2/sites-available/site-exemplo.conf /etc/apache2/sites-enabled/’ para criar um link desses arquivos e disponibilizar o site.

Agora o gerenciamento fica muito mais simples. Para retirar um site do ar, basta remover o link da pasta sites-enabled.

Leave a comment