Não é assim que os hosts virtuais funcionam, receio;) Os hosts virtuais são usados para hospedar vários sites independentes no mesmo servidor da web.
"De volta ao dia", uma máquina hospedava um site em um endereço. Digamos que o seu servidor hospede o site "www.my-site.tld". Os arquivos para esse site (html, css, javascript, imagens, scripts, ...) são armazenados em /var/www/
. Portanto, na configuração do Apache, o DocumentRoot
seria definido para esse diretório, /var/www/
.
Se você agora apontasse seu navegador para http://www.my-site.tld/welcome.html
, ele exibiria o arquivo /var/www/welcome.html
. Para estruturar seu site, você pode usar subpastas. Então, por exemplo, se você apontasse seu navegador para http://www.my-site.tld/holidays/summer2001.html
, ele mostraria o arquivo /var/www/holidays/summer2001.html
.
Até aí tudo bem. Mas e se você quisesse hospedar mais de um site na mesma máquina, no mesmo host? Vários sites sob endereços diferentes, que são (se você olhar para eles "de fora"), independentes entre si, e não apenas subdiretórios dentro do mesmo site? É aí que os hosts virtuais entram em ação.
Em uma configuração de host virtual, você pode definir muitas diretivas não globalmente para todo o servidor, mas por site . Digamos que você esteja hospedando dois sites no mesmo servidor, "www.my-site.tld" e "www.my-other-site.tld". Para isso, você pode usar duas configurações de host virtual, por exemplo
<VirtualHost *:80>
DocumentRoot /var/www/my-site/
ServerName www.my-site.tld
ServerAlias my-site.tld
DirectoryIndex welcome.html
CustomLog /var/log/apache2/my-site.access.log "combined"
ErrorLog /var/log/apache2/my-site.error.log
</VirtualHost>
e
<VirtualHost *:80>
DocumentRoot /var/www/my-other-site/
ServerName www.my-other-site.tld
ServerAlias my-other-site.tld
DirectoryIndex index.html
CustomLog /var/log/apache2/my-other-site.access.log "combined"
ErrorLog /var/log/apache2/my-other.error.log
</VirtualHost>
Você vê que o DocumentRoot
é definido de maneira diferente em cada host virtual, o mesmo para o ServerName
, o mesmo para o ServerAlias
e assim por diante.
Espero poder ilustrar a ideia de hosts virtuais e por que hosts virtuais e subdiretórios dentro do mesmo host são duas coisas diferentes. Para torná-lo ainda mais complicado, você pode ter subdiretórios dentro de um host virtual;) Digamos, o endereço http://www.my-other-website.tld/tournaments/finals2015.html
com a configuração acima apontaria para /var/www/my-other-site/tournaments/finals2015.html
.
Algumas outras coisas que você pode encontrar, mas que não posso entrar em detalhes aqui:
Se você usa endereços, nomes de domínio e outros, precisa ter certeza de que todos sabem onde encontrá-los. Apenas definir ServerName my-cool-site.com
não permite que "a Internet" direcione solicitações de my-cool-site.com
para;) Para isso, normalmente você usaria o DNS comprando (na verdade, é mais aluguel , porque você precisa renová-lo de vez em quando) o nome de domínio e configurar uma entrada dns para o efeito "se alguém está procurando my-cool-site.com
, enviá-los para o servidor tal e tal".
Quando você usa um endereço IP em vez de um nome de domínio, por exemplo, http://127.0.0.1/webstuff/how-dns-works.html
, isso não altera os princípios mostrados acima. Na verdade, se o seu servidor tiver atribuído vários ips a ele, você poderá diferenciá-los em seus hosts virtuais. <VirtualHost *:80>' means "apply this to requests for any ip, on port 80". If your server has
192.168.2.101 and
192.168.2.102 assigned to it, you can differentiate between those ips in your virtual hosts.
só se aplica para pedidos direcionados para192.168.2.101 , not for requests directed to
192.168.2.102 '.
Se você quiser chamar seu servidor da mesma máquina que está em execução e não quiser usar um ip diretamente, normalmente é só dizer "Mostre-me a página da Web no mesmo host em que estou agora, no host local ". Para isso, normalmente, o nome do host especial localhost
está configurado. Assim, você pode digitar algo como ' link ' no campo de endereço do seu navegador.
Normalmente, você tem um "diretório pai" comum no qual todos os seus hosts virtuais DocumentRoot
s estão. Por exemplo, você pode ter todos os seus hosts virtuais como subdiretórios de /var/www/
. Não é estritamente necessário usar essa estrutura, mas ela tem provado ajudá-lo a controlar as coisas, em contraste com o armazenamento de seus sites em todo o lugar;)
Para incluir um diretório de fora do DocumentRoot
de um host virtual, você pode usar um Alias
. Digamos que você adicione à configuração do host virtual de "www.my-site.tld" uma diretiva como
Alias /sports /home/john/some-sports
Nesse caso, http://www.my-site.tld/sports/soccer.html
apontaria para /home/john/some-sports/soccer.html
.
Mas esses casos são propensos a problemas de permissão. Os arquivos em /home/john/some-sports
são normalmente de propriedade do usuário john
, portanto, o usuário do seu software de servidor da Web (Apache) está em execução, pois pode não ter acesso a eles.
Tudo o que pode ser um pouco mais digerido de uma só vez, mas esses são alguns dos conceitos básicos que você precisa entender para executar com êxito um servidor da web. Não é tão complicado quanto parece à primeira vista.