É a seguinte parte de uma configuração de host virtual na qual preciso de mais esclarecimentos:
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin [email protected]
ServerName 141.29.495.999
ServerAlias example.com
...
Este é um exemplo de configuração, semelhante ao que eu tenho atualmente (não tenho um nome de domínio no momento).
<VirtualHost *:80>
- Permitir as seguintes configurações para todas as solicitações HTTP feitas na porta 80 para IPs nos quais este servidor pode ser contatado. Por exemplo, se o servidor puder ser acessado em mais de um IP, você poderá restringir esta diretiva a apenas um em vez de ambos.
ServerName
- Se a parte do host da solicitação HTTP corresponder a esse nome, permita a solicitação. Normalmente, esse seria um nome de domínio que mapeia para um IP, mas nesse caso o host da solicitação HTTP deve corresponder a esse IP.
ServerAlias
- Nomes alternativos aceitos pelo servidor.
A parte confusa para mim é, no cenário acima, se eu definir ServerAlias mytestname.com
e depois fizer uma solicitação HTTP mytestname.com
, teria que haver um registro DNS apontando para o IP do servidor para que isso funcionasse? Nesse caso, o ServerAlias é basicamente basicamente entradas EXTRA ServerName?
Digamos que eu tivesse uma entrada DNS tal que, foobar.com = 141.29.495.999
mas então eu tinha ServerName = 141.29.495.999
e ServerAlias
estava vazia, isso significaria que, embora foobar.com seja resolvido com o IP correto, porque não há referência para aceitar foobar.com em ServerName
ou ServerAlias
?
Ou alguma coisa. Cara, eu estou confuso.
Respostas:
Pense assim:
DNS é o diretório telefônico / páginas amarelas. Quando alguém deseja ligar para o seu telefone, ele pode procurar seu nome e obter seu número de telefone. O DNS faz o mesmo, mas nos computadores - quando alguém deseja acessar
www.example.com
, solicita o endereço IP ao DNS e, em seguida, pode entrar em contato com o computador que possui esse endereço IP. É isso que resolver significa. A resolução de um endereço IP não tem nada a ver com o Apache; é estritamente uma questão de DNS.A
ServerName
eServerAlias
é mais como a lista telefônica interna de uma empresa. Seu servidor da web é a central telefônica; ele aceitará todas as conexões de entrada com o servidor. Em seguida, o cliente / chamador dirá a eles o nome que eles estão procurando e procurará na configuração do Apache como lidar com esse nome.Se o nome não estiver listado como ServerName / ServerAlias na configuração do apache, o apache sempre fornecerá a eles o primeiro VirtualHost listado. Ou, se não houver VirtualHost, ele fornecerá o mesmo conteúdo, independentemente do nome do host fornecido na solicitação.
ETA: Então, passo a passo para uma conexão normal:
http://www.example.com
no seu navegador.www.example.com
.www.example.com
(esse é oHost:
cabeçalho no HTTP).www.example.com
. Qualquer um dos seguintes pode acontecer:www.example.com
estiver listado como umServerName
ouServerAlias
para umVirtualHost
- em caso afirmativo, ele usará a configuração desse VirtualHost para entregar o conteúdo.www.example.com
não está listado em nenhum deles - se houver, o primeiro Virtualhost da lista será usado para entregar o conteúdo.fonte
www.example.com
, o DNS resolverá o endereço IP desse nome e a parte do host da solicitação HTTP será realmente um IP; ao acessar o servidor, o apache também saberá que a solicitação solicitadawww.example.com
e se houver uma diretivaServerName
ouServerAlias
para esse nome de domínio, ele poderá servir a raiz do documento?The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.
. Eu testei isso. Está certo, mas não tenho certeza se é o primeiro Virtualhost. Obrigado pela informação. +1Se você não definir o ServerName, o apache2 tentará adivinhar em / etc / hosts. ServerAlias é opcional. O caso de uso mais comum é onde
Cabe a você (não ao trabalho do apache2) garantir que as solicitações atinjam o IP do servidor da web, por exemplo, registrando um domínio e configurando registros DNS. Uma maneira muito comum de fazer isso (para teste e desenvolvimento) sem registros de domínio e DNS é definir o arquivo / etc / hosts da máquina local para que o example.com aponte para o IP do seu servidor.
fonte
Eu sugiro fortemente que leia a documentação oficial sobre o assunto: https://httpd.apache.org/docs/2.4/vhosts/name-based.html
ele diz "Se nenhum ServerName ou ServerAlias correspondente for encontrado no conjunto de hosts virtuais que contêm o endereço IP e a combinação de portas correspondentes mais específicos, o primeiro host virtual listado que corresponder ao que será usado". . Portanto, no seu caso, se você acessar "foobar.com", a primeira entrada do VirtualHost que de alguma forma corresponda ao IP 141.29.495.999 seria usada pelo httpd
O mesmo documento diz "Muitos servidores querem estar acessíveis por mais de um nome. Isso é possível com a diretiva ServerAlias". Portanto, você pode considerar ServerAlias simplesmente como entradas adicionais de ServerName.
fonte