Come funzionano ServerName e ServerAlias?


62

È la parte seguente di una configurazione host virtuale che ho bisogno di ulteriori chiarimenti su:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin example@example.com
  ServerName  141.29.495.999
  ServerAlias example.com
...

Questo è un esempio di configurazione, simile a quello che ho attualmente (al momento non ho un nome di dominio).

<VirtualHost *:80>- Consentire le seguenti impostazioni per tutte le richieste HTTP effettuate sulla porta 80 a IP su cui è possibile contattare questo server. Ad esempio, se è possibile accedere al server su più di un IP, è possibile limitare questa direttiva a una sola anziché a entrambe.

ServerName- Se la parte host della richiesta HTTP corrisponde a questo nome, quindi consentire la richiesta. Normalmente si tratterebbe di un nome di dominio associato a un IP, ma in questo caso l'host di richiesta HTTP deve corrispondere a questo IP.

ServerAlias - Nomi alternativi accettati dal server.

La parte confusa per me è, nello scenario sopra, se ho impostato ServerAlias mytestname.come quindi fatto una richiesta HTTP mytestname.com, dovrebbe esserci un record DNS che punta all'IP del server affinché funzioni? In tal caso, ServerAlias ​​è fondamentalmente solo voci EXTRA ServerName?

Supponiamo di avere una voce DNS tale che, foobar.com = 141.29.495.999ma che avevo ServerName = 141.29.495.999ed ServerAliasera vuota, ciò significherebbe che sebbene foobar.com venga risolto nell'IP corretto, perché non esiste alcun riferimento per accettare foobar.com in ServerNameo ServerAlias?

O qualcosa. Amico, sono confuso.


1
Hai dimenticato alcune parole nel penultimo paragrafo. :-)
ThatGraemeGuy

Risposte:


105

Pensalo in questo modo:

DNS è la rubrica telefonica / pagine gialle. Quando qualcuno vuole chiamare il tuo telefono, può cercare il tuo nome e ottenere il tuo numero di telefono e chiamare quel telefono. Il DNS fa lo stesso, ma per i computer: quando qualcuno vuole andare www.example.comchiedono al DNS l'indirizzo IP e quindi possono contattare il computer che ha quell'indirizzo IP. Questo è ciò che significa risolvere . La risoluzione di un indirizzo IP non ha nulla a che fare con Apache; è strettamente una domanda DNS.

L' ServerNamee ServerAliasè più simile all'elenco telefonico interno di un'azienda. Il tuo server web è il centralino; accetterà tutte le connessioni in entrata al server. Quindi il client / chiamante dirà loro quale nome stanno cercando e cercherà come gestire quel nome nella configurazione di Apache.

Se il nome non è elencato come ServerName / ServerAlias ​​nella configurazione di Apache, Apache darà sempre loro il primo VirtualHost elencato. Oppure, se VirtualHost non è presente, fornirà lo stesso contenuto indipendentemente dal nome host indicato nella richiesta.

ETA: Quindi, passo dopo passo per una normale connessione:

  1. Digiti http://www.example.comnel tuo browser.
  2. Il tuo computer chiede al suo risolutore DNS quale indirizzo IP dovrebbe usare quando vuole parlare www.example.com.
  3. Il tuo computer si connette a quell'indirizzo IP e dice che vuole parlare www.example.com(è l' Host:intestazione in HTTP).
  4. Il server web osserva la sua configurazione per capire cosa fare con una richiesta di contenuto da www.example.com. Si può verificare uno dei seguenti casi:
    • www.example.comè elencato come a ServerNameo ServerAliasper a VirtualHost- in tal caso, utilizzerà la configurazione di quel VirtualHost per consegnare il contenuto.
    • Il server non ha alcun host virtuale - in tal caso, utilizzerà la configurazione nel suo httpd.conf per consegnare il contenuto.
    • Il server ha VirtualHosts ma www.example.comnon è elencato in nessuno di essi - in tal caso, il primo Virtualhost nell'elenco verrà utilizzato per consegnare il contenuto.

Quindi, se la parte host di una richiesta HTTP è www.example.com, il DNS risolverà l'indirizzo IP per quel nome e la parte host della richiesta HTTP sarà effettivamente un IP; al raggiungimento del server, Apache saprà anche che la richiesta è stata richiesta www.example.come se esiste una direttiva ServerNameo ServerAliasper quel nome di dominio, può servire la radice del documento?
njp,

No: la parte della richiesta HTTP è ancora il nome host. Chiarirò ancora un po '.
Jenny D dice Reinstate Monica il

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.. Ho provato questo. È giusto ma non sono sicuro che sia il primo Virtualhost. Grazie per le informazioni. +1
SMMousavi,

19

Se non si definisce ServerName, allora apache2 proverà a indovinarlo da / etc / hosts. ServerAlias ​​è facoltativo. Il caso d'uso più comune è dove

ServerName example.com
ServerAlias www.example.com

Spetta a te (non al lavoro di apache2) assicurarsi che le richieste raggiungano l'IP del server web, ad esempio registrando un dominio e configurando i record DNS. Un modo molto comune per farlo (per test e sviluppo) senza record di dominio e DNS è quello di impostare il file / etc / hosts della macchina locale in modo che example.com punti all'IP del server.

192.168.0.12 example.com
192.168.0.12 www.example.com

0

Consiglio vivamente di leggere la documentazione ufficiale sull'argomento: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

dice "Se non si trova ServerName o ServerAlias ​​corrispondenti nel set di host virtuali contenenti l'indirizzo IP e la combinazione di porte più specifici corrispondenti, allora verrà utilizzato il primo host virtuale elencato che corrisponderà a quello utilizzato." . Quindi nel tuo caso se accedi a "foobar.com", la prima voce di VirtualHost che in qualche modo corrisponde all'IP 141.29.495.999 verrebbe utilizzata da httpd

Lo stesso documento dice "Molti server vogliono essere accessibili con più di un nome. Questo è possibile con la direttiva ServerAlias". Quindi puoi considerare ServerAlias ​​semplicemente come voci ServerName aggiuntive.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.