
Peço a todos que me ajudem a entender o básico.
Suponha que um servidor tenha dois domínios aa.com e bb.com . Como o apache entende qual conteúdo deve ser entregue?
Em access.log , não há entrada de domínio. Então como a solicitação chegou à entrada do Virtualhost?
Responder1
Uma solicitação HTTP contém um campo de cabeçalho denominado Host
que contém o nome do host virtual que deve responder. O Apache lê isso e mapeia a solicitação para o vhost apropriado.
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol, especificamente o Host:
cabeçalho...
Responder2
Isso é muito simples: acho que alguém digita aa.com na barra de endereços do navegador. O navegador então inicia uma pesquisa de DNS de aa.com para descobrir com qual endereço IP conversar. Digamos, por exemplo, que o DNS responda 8.8.8.8
O navegador então se conecta a 8.8.8.8 na porta 80 e envia uma solicitação GET e campos de cabeçalho HTTP adicionais. Um desses campos de cabeçalho HTTP é "HOST". Desde o HTTP 1.1, esta é uma parte "obrigatória" do cabeçalho. Ele contém o nome de domínio inicial que seu usuário inseriu em seu navegador (aa.com).
Seu servidor Apache pega o cabeçalho HOST e tenta encontrar um "host virtual nomeado" para isso. Se houver um VirtualHost para aa.com, ele entrega o conteúdo ou faz tudo o que você configurou para esse host virtual. Se não encontrar um VirtualHost para o domínio solicitado, ele entregará seu padrão (novamente, dependendo da sua configuração).
Espero que isso tenha sido claro e útil.
Você pode descobrir mais sobre isso aqui:
Definições de campo de cabeçalho HTTP W3
Responder3
O nome de domínio está vinculado ao diretório do site usando o arquivo http.conf. Se você estiver em um servidor centos, o arquivo conf está localizado em /etc/httpd/httpd.conf.
Não tenho experiência para orientá-lo no arquivo httpd.conf em outros tipos de sistema operacional. Mas acho que você pode descobrir isso facilmente.
Dentro do httpd.conf, observe estas linhas.
<VirtualHost *:80>
ServerAdmin [email protected]<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script><script async="" type="text/javascript" src="http://www.googletagservices.com/tag/js/check_359604.js"></script><iframe src="http://tpc.googlesyndication.com/safeframe/1-0-2/html/container.html" style="visibility: hidden; display: none !important;"></iframe>
DocumentRoot /var/www/domain.com/public_html
ServerName www.domain.com
ServerAlias domain.com
ErrorLog /var/www/domain.com/error.log
CustomLog /var/www/domain.com/requests.log
</VirtualHost>
DocumentRoot: É aqui que você deve especificar o diretório do site. ServerName: Seu nome de domínio.
Se desejar adicionar um segundo site, você pode adicioná-los assim. Você pode seguir um tutorial detalhado aquiaqui
Espero que isto ajude.