Como ServerName e ServerAlias ​​funcionam?


62

É 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 example@example.com
  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.come 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.999mas então eu tinha ServerName = 141.29.495.999e ServerAliasestava vazia, isso significaria que, embora foobar.com seja resolvido com o IP correto, porque não há referência para aceitar foobar.com em ServerNameou ServerAlias?

Ou alguma coisa. Cara, eu estou confuso.


11
Você esqueceu algumas palavras no segundo e último parágrafos. :-)
ThatGraemeGuy

Respostas:


105

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 ServerNamee ServerAliasé 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:

  1. Você digita http://www.example.comno seu navegador.
  2. Seu computador pergunta ao resolvedor de DNS qual endereço IP ele deve usar quando quiser conversar www.example.com.
  3. Seu computador se conecta a esse endereço IP e diz que deseja conversar www.example.com(esse é o Host:cabeçalho no HTTP).
  4. O servidor da web examina sua configuração para descobrir o que fazer com uma solicitação de conteúdo www.example.com. Qualquer um dos seguintes pode acontecer:
    • www.example.comestiver listado como um ServerNameou ServerAliaspara um VirtualHost- em caso afirmativo, ele usará a configuração desse VirtualHost para entregar o conteúdo.
    • O servidor não possui nenhum VirtualHosts; nesse caso, ele usará a configuração em seu httpd.conf para entregar o conteúdo.
    • O servidor possui VirtualHosts, mas www.example.comnão está listado em nenhum deles - se houver, o primeiro Virtualhost da lista será usado para entregar o conteúdo.

Portanto, se a parte do host de uma solicitação HTTP for 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 solicitada www.example.come se houver uma diretiva ServerNameou ServerAliaspara esse nome de domínio, ele poderá servir a raiz do documento?
Njp 02/07/2013

Não - a parte da solicitação HTTP ainda é o nome do host. Vou esclarecer um pouco mais.
Jenny D diz Reinstate Monica

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. +1
SMMousavi

19

Se você não definir o ServerName, o apache2 tentará adivinhar em / etc / hosts. ServerAlias ​​é opcional. O caso de uso mais comum é onde

ServerName example.com
ServerAlias www.example.com

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.

192.168.0.12 example.com
192.168.0.12 www.example.com

0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.