Como o ServerName e o ServerAlias funcionam?

53

É a parte seguinte de uma configuração de host virtual que eu 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 (eu 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 os IPs nos quais esse servidor pode ser contatado. Por exemplo, se o servidor puder ser acessado em mais de um IP, você poderá restringir essa diretiva a apenas uma em vez de ambas.

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 é mapeado para um IP, mas, nesse caso, o host de solicitação de 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, em seguida, fizer uma solicitação HTTP para mytestname.com , teria que haver um registro DNS apontando para o IP do servidor para que isso funcione? Nesse caso, o ServerAlias é basicamente apenas entradas EXTRA ServerName?

Digamos que eu tivesse uma entrada de DNS como foobar.com = 141.29.495.999 , mas eu tivesse ServerName = 141.29.495.999 e ServerAlias estava vazio, isso significaria que, embora foobar.com seja resolvido para o IP correto, porque não há referência para aceitar foobar.com em ServerName ou ServerAlias ?

Ou algo. Cara estou confuso.

    
por njp 02.07.2013 / 16:00

2 respostas

91

Pense nisso assim:

DNS é o diretório telefônico / páginas amarelas. Quando alguém quiser ligar para seu telefone, ele pode procurar seu nome, obter seu número de telefone e ligar para esse telefone. O DNS faz o mesmo, mas para computadores - quando alguém quer ir para www.example.com , ele solicita ao DNS o endereço IP e, em seguida, pode entrar em contato com o computador que possui esse endereço IP. Isso é o que resolve significa. Resolver um endereço IP não tem nada a ver com o Apache; é estritamente uma questão de DNS.

O ServerName e o ServerAlias assemelham-se mais à lista de telefones internos de uma empresa. Seu servidor é a central telefônica; Ele aceitará todas as conexões de entrada para o servidor. Em seguida, o cliente / responsável pela chamada informará o nome que está procurando e procurará na configuração do Apache como lidar com esse nome.

Se o nome não estiver listado como um ServerName / ServerAlias na configuração do apache, o apache sempre fornecerá o primeiro VirtualHost listado. Ou, se não houver nenhum 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.com no seu navegador.
  2. Seu computador pergunta ao seu resolvedor de DNS qual endereço IP ele deve usar quando quiser falar com www.example.com .
  3. Seu computador se conecta a esse endereço IP e diz que deseja falar com www.example.com (esse é o cabeçalho Host: em HTTP).
  4. O servidor da Web analisa sua configuração para descobrir o que fazer com uma solicitação de conteúdo de www.example.com . Qualquer um dos seguintes pode acontecer:
    • www.example.com está listado como ServerName ou ServerAlias para VirtualHost - em caso afirmativo, usará a configuração para que o VirtualHostto forneça o conteúdo.
    • O servidor não tem nenhum VirtualHosts - se for o caso, ele usará a configuração em seu httpd.conf para entregar o conteúdo.
    • O servidor tem VirtualHosts, mas www.example.com não está listado em nenhum deles - se for o caso, o primeiro Virtualhost na lista será usado para entregar o conteúdo.
por 02.07.2013 / 16:07
16

Se você não definir o ServerName, o apache2 tentará adivinhá-lo a partir do / etc / hosts. O 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 de sua máquina local para que example.com aponte para o IP do seu servidor.

192.168.0.12 example.com
192.168.0.12 www.example.com
    
por 02.07.2013 / 16:13