Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2)

Neste tutorial você vai aprender como configurar vários domínios no mesmo servidor, bem como aplicar medidas simples de segurança.

Vou utilizar a distribuição mais recente do Debian 10 como o tutorial LAMP, e claro que antes de mais nada você precisa ter seu DNS configurado com seus subdomínios (hosts) apontando para o IP do seu servidor WEB. logo nossos requezitos são:
Instalação Debian 10 Buster LIMPA Passo-a-passo
Servidor DNS seguro com Bind9 (Recursivo, Autoritativo e Reverso) + Fail2ban + nftables no Debian 10 Buster
Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”

No nossos exemplos vou configurar 4 subdomínios www, teste, phpipam e sistema. Com a ideia que seja um nosso site, um testador de banda, nosso querido phpipam onde documentamos os ips da nossa rede e sistema um subdomínio que vai ter alguma “sistema web qualquer”.

Tenha então em seu arquivo da configuração DNS autoritativa ( ex /var/cache/bind/master-aut/seudominio.net.br.hosts) seus subdomínios apontados, no nosso ex os IPs seriam o 45.80.50.2 e 2804:f123:bebe:cafe::2

Com seu Apache já instalado vamos algumas informações que são necessárias saber. O Apache mantém seus arquivos de configuração dentro da pasta /etc/apache2:

Há vários arquivos de texto simples e alguns subdiretórios de forma bem organizada e objetiva, os principais são:

apache2.conf: Este é o arquivo de configuração principal do servidor. Quase toda a configuração pode ser feita dentro desse arquivo, embora seja recomendado usar arquivos separados e designados para simplificar. Este arquivo irá configurar os padrões e ser o ponto central de acesso para o servidor ler os detalhes da configuração.

ports.conf: Este arquivo é usado para especificar as portas nas quais os hosts devem ouvir.

conf-[available, enabled]/: Este diretório é usado para controlar aspectos específicos da configuração do Apache. Por exemplo, costuma ser usado para definir opções de segurança.

sites-[available-enabled]/: este diretório contém todos os arquivos de hosts virtuais que definem cada subdmínio. Eles estabelecerão qual conteúdo será exibido para quais solicitações.

mods-[available, enabled]/: Esses diretórios são semelhantes em função aos diretórios de sites, mas eles definem módulos que podem ser carregados opcionalmente.

Como você pode ver alguns diretórios encontramos available e enabled, como o próprio nome diz o que esta em available são as configurações disponíveis e em enabled as configurações ativas. As configurações do Apache não ocorre em um único arquivo mas acontece através de um design modular onde novos arquivos podem ser adicionados e modificados conforme necessário.

Normalmente você após instalar o apache “corre” para o navegador e digita o endereço do seu IP para ver se seu servidor esta funcionando.

Mas agora que você conhece um pouquinho mais da arquitetura do diretório apache que tal saber porque ele mostra essa pagina default ao abrir seu IP no navegador?

Logo se é algo que esta carregando web deve estar dentro do diretório /etc/apache2/sites-enabled/ e é la que encontramos o 000-default.conf abra o mesmo e veja como ele é configurado

Esse é seu arquivo de configuração default

VirtualHost *:80 – Temos então nosso “primeiro e único” até o momento domínio virtual. Perceba q *:80 quer dizer qlqr ip na porta 80, entao se você tiver diversos endereços ips no mesmo servidor ele sempre vai interpretar. Se você tá experto notou o ServerName comentado, é ele que configuramos nossos hosts, logo se o mesmo não tem nenhum ServerName configurado o apache entende que tudo que jogarem para ele na porta 80 ele carregue essa pagina default, neste momento os 4 subdomínios vão esta carregando a mesma pagina.

ServerAdmin – E-mail do administrador

DocumentRoot – Diretório onde fica os arquivos. Padrão da instalação é o /var/www/html onde encontramos uma index.html que se você editar vai descobrir que é aquela página default. Vale lembrar que sempre que o arquivo se chamar index.html/php ele vai ser carregado ao acessar aquele diretório.

ErrorLog – Local onde ele vai registrar o logs de erros.

CustomLog – local onde guardará os logs de acesso.

Para cada subdomínio (host) vou criar um diretório novo dentro de /var/www/ e para ficar bem objetivo darei o nome da pasta o mesmo do host:

Criamos os diretórios

Se ainda não habilitou o mod_rewrite vamos habilitar, o mesmo utiliza um mecanismo baseado em regras de reescrita, ex o wordpress e phpipam usam o mesmo.

Vamos ao comando para habilita-lo:

Nosso primeiro arquivo vai representar o host www, ele vai ficar em sites-available ou seja ainda não está ativo (enable) e mais uma vez para ser objetivo vai ter o mesmo nome do host, porém ele deve terminar com .conf, logo www.conf

Agora vamos ter dois caras novos ServerName e ServerAlias qual vai esta apontando para nossos domínios. Como o ServerAlias pode ser apontado para diversos hosts.

Note que em ErrorLog e CustomLog eu adicionei um _www junto para que no log tenha apenas informações desse host.

Hora de habilitar! Usamos o comando a2ensite ele vai pegar o arquivo www.conf da pasta sites-available e criar um atalho dentro de sites-enabled

Para que as novas configurações do apache tenham efeito é necessário restartar o apache.

Para o Host teste vai ser o mesmo procedimento, porém em Options vou colocar o valor Indexes, para que o mesmo me liste os diretórios sem arquivos index, é recomendado que você não utilize pois vou demonstrar a frente uma tela por isso estou deixando ele. Para um cenario real deixe apenas Options FollowSymLinks

Você já será capas de acessar os dois host tendo paginas diferentes.

Antes de prosseguir tem um detalhe que eu particularmente não gosto de deixar quaquer um ficar sabendo o que esta rodando e versões:
“Apache/2.4.38 (Debian) Server at teste.remontti.com.br Port 80”.
Por segurança recomendo remover a assinatura do servidor, para isso edite:

Altere as variáveis:
ServerTokens Prod
ServerSignature Off

Restar o apache2


Pronto ninguém precisa saber!

Para o phpipam vou fazer um pouco diferente, vamos focar na segurança, no exemplo vou permitir apenas “meu bloco do NOC” ter acesso (45.80.51.0/29 2804:f123:bebe:coca::/64), e diferente dos blocos permitidos vou direcionar ele para o “site da empresa”.

Por fim nosso host sistema, nesse vou ensinar como colocar uma senha do apache. No passado já tem um tutorial como proteger diretórios do apache de duas maneira, pelo arquivo de configuração do apache que vou demonstrar aqui e através do htaccess.

apachelogin

Primeiramente vamos gerar nosso arquivo de usuário/senha com htpasswd -c arquivo usuário (-c criar arquivo)

Digite sua senha para o usuário admin

Vou permanecer com a restrição por IP mas se você deseja remover basta remover o:

Por segurança recomendo remover a assinatura do servidor, evitando os “espertinhos”

Que tal usar o letsencrypt e ter certificado valido para seus hosts?
Faça a instalação do letsencrypt

Antes de gerar nossa configuração pare o apache

Altere www.remontti.com.br para SEU.DOMINIO!

Você pode rodar também o comando:

O mesmo vai verificar todos os domínios virtuais e lheperguntar para quais você deseja gerar certificado!

Dica, se desejar desativar o TLS1.0 e TLS1.1 após criar um certificado um arquivo é criado /etc/letsencrypt/options-ssl-apache.conf, então edite e inclua no SSLProtocol TLSv1 -TLSv1.1

Ficando

Reinicie o Apache:

Para testar acesse: https://www.cdn77.com/tls-test/

Gostou?

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Fonte:
https://httpd.apache.org/docs/2.4/howto/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

23 Resultados

  1. Clelson Ribeiro disse:

    Excelente tutorial Rudimar, vc é top!!!

  2. Léo de Oliveira Camargo disse:

    Ola
    Existe uma forma de redirecionar para um porta diferente? Por ex: tenho um parte do sistema que roda na porta 80 e outra que roda na porta 8080
    quero redirecionar o serviço1.dominio.com.br para o 8080 e o dominio.com.br para o 80

  3. Cleiton disse:

    Boa Tarde, posso apontar para o meu localhost ao invés de um IP público ?

  4. carlos disse:

    Show. valeu cara.

  5. Willian disse:

    Fiz conforme mencionou para ter vários sites no mesmo ip local interno…. Mas no meu caso, queria algo do tipo
    192.168.50.210 – cai na pagina do apache (normal)
    192.168.50.210/banana (gostaria que mostrasse o site que está nesse diretório)
    192.168.50.210/manga (iria para o outro site)
    E assim sucessivamente…
    No servidor só instalei o debian, apache, php e mariadb… Apache OK
    Na rede local tem um servidor windows que responde como AD….
    Quando digito no navegador da minha máquina o IP do debian 192.168.50.210 apresenta a página do Apache ok, mas as outras que criei conforme seu exemplo acima não acontece nada… O que estou fazendo de errado ?

  6. Olá Rudimar Remontti,

    Uma duvida, quando tem certificado digital, quando entro por exemplo no http://www.remontti.com.br ele vai para pagina principal do apache, para funcionar eu tenho que digitar https://www.remontti.com.br.

    Minha duvida é como fazer o redirecionamento para o https pelo apache. Poderia me ajudar?

    • Adiciona dentro do seu virtualhost:

  7. Paulo Carvalho disse:

    Uma dúvida meio besta, é possível fazer o não responder quando eu colocar o IP (v4 e v6) do servidor? Tentei desativar tudo que era possível mas, quando coloco o IP do servidor sempre tem alguma resposta.

    PS: Meu server está rodando o zabbix instalado por pacotes (a instalação que subiu o apache).

  8. Douglas disse:

    Olá!
    Encontrei um erro…
    Primeiramente, quero dizer que faço de acordo com o passo a passo desde a instalação limpa do Debian 10 –> LAMP –> aqui.
    Depois do comando a2ensite www, evoquei o comando systemctl reload apache2, e apareceu uma mensagem de erro. O comando systemctl status apache2.service, acusou problema no documento /etc/apache2/apache2.conf na linha escrita: IncludeOptional sites-enabled/*.conf . O que tem que alterar???

  1. 13 de janeiro de 2020

    […] também configurar nosso domínio virtual para acessar o servidor via domínio (ex vbox.remontti.com.br) e restringir ele apenas para nossos […]

  2. 23 de janeiro de 2020

    […] seu servidor web configurado, seria bacana criar um host no seu dns e configurar nesse seu servdor web um domínio virtual ex.: log6.seudominio.com.br onde você irá jogar os arquivos do projeto. Mas como muitos não tem […]

  3. 28 de março de 2020

    […] colocar o projeto no diretório padrão do apache /var/www/html/, mas você pode criar um domínio virtual para isso ficar muito mais legal e ainda criar um certificado gratuitamente com o Let’s […]

  4. 1 de abril de 2020
  5. 25 de julho de 2020

    […] de configuração do Apache2 com um domínio virtual utilizando o Let’s Encrypt para criptografar nossa conexão […]

  6. 25 de agosto de 2020

    […] Para nosso exemplo crie um domínio virtual nas configurações do apache. Lei mais em: Como ter diversos sub/domínios no mesmo servidor? (Domínios virtuais com Apache2) […]

  7. 13 de março de 2021

    […] recomendadas: Como ter diversos sub/domínios no mesmo servidor? Passo-a-passo como criar um servidor WEB Servidor DNS seguro com Bind9 Crie um subdomínio em […]

  8. 6 de abril de 2021

    […] “/”);) em config.php, se você colocou no diretório raiz ou configurou um domínio virtual (recomendo) para o phpipam não é necessário […]

  9. 10 de dezembro de 2021

    […] Para você aprender mais como o apache funciona recomendo: Como ter diversos sub/domínios no mesmo servidor […]

  10. 6 de fevereiro de 2023

    […] também configurar nosso domínio virtual para acessar o servidor via domínio (ex vbox.remontti.com.br) e restringir ele apenas para nossos […]

  11. 20 de fevereiro de 2023

    […] também configurar nosso domínio virtual para acessar o servidor via domínio (ex vbox.remontti.com.br) e restringir ele apenas para nossos […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *