Jak działają ServerName i ServerAlias?

62

Jest to następująca część konfiguracji wirtualnego hosta, o której potrzebuję dalszego wyjaśnienia:

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

To jest przykładowa konfiguracja, podobna do tej, którą aktualnie posiadam (w tej chwili nie mam nazwy domeny).

<VirtualHost *:80>- Zezwól na następujące ustawienia dla wszystkich żądań HTTP wysyłanych przez port 80 do adresów IP, z którymi można skontaktować się z tym serwerem. Na przykład, jeśli dostęp do serwera można uzyskać z więcej niż jednego adresu IP, można ograniczyć tę dyrektywę do tylko jednego zamiast obu.

ServerName- Jeśli część hosta żądania HTTP jest zgodna z tą nazwą, zaakceptuj żądanie. Zwykle jest to nazwa domeny odwzorowana na adres IP, ale w tym przypadku host żądań HTTP musi pasować do tego adresu IP.

ServerAlias - Alternatywne nazwy akceptowane przez serwer.

Mylące dla mnie jest to, że w powyższym scenariuszu, jeśli ustawię, ServerAlias mytestname.coma następnie wykonam żądanie HTTP mytestname.com, musiałby istnieć rekord DNS wskazujący adres IP serwera, aby to zadziałało? W takim przypadku, czy ServerAlias ​​to po prostu EXTRA wpisy ServerName?

Powiedzmy, że mam taki wpis DNS, foobar.com = 141.29.495.999ale potem miałem ServerName = 141.29.495.999i ServerAliasbył pusty, czy to znaczy, że chociaż foobar.com zostanie rozstrzygnięty na właściwy adres IP, ponieważ nie ma odniesienia do zaakceptowania foobar.com w ServerNamelub ServerAlias?

Lub coś. Człowieku, jestem zmieszany.

njp
źródło
1
Zapomniałeś słów w drugim akapicie. :-)
ThatGraemeGuy

Odpowiedzi:

105

Pomyśl o tym w ten sposób:

DNS to książka telefoniczna / żółte strony. Gdy ktoś chce zadzwonić na Twój telefon, może sprawdzić Twoje imię i nazwisko, uzyskać Twój numer telefonu i zadzwonić na ten telefon. DNS robi to samo, ale w przypadku komputerów - gdy ktoś chce do niego przejść www.example.com, pyta DNS o adres IP, a następnie może skontaktować się z komputerem, który ma ten adres IP. To właśnie oznacza postanowienie . Rozwiązanie adresu IP nie ma nic wspólnego z Apache; jest to ściśle pytanie DNS.

ServerNameI ServerAliasjest bardziej jak listy wewnętrznej telefonu firmy. Twój serwer to centrala; zaakceptuje wszystkie połączenia przychodzące do serwera. Następnie klient / osoba dzwoniąca powie im, jakiej nazwy poszukuje, i sprawdzi w konfiguracji Apache, jak obsługiwać tę nazwę.

Jeśli nazwa nie jest wymieniona jako NazwaSerwera / ServerAlias ​​w konfiguracji apache, apache zawsze da im pierwszą listę VirtualHost. Lub, jeśli w ogóle nie ma VirtualHost, zapewni tę samą zawartość bez względu na nazwę hosta podaną w żądaniu.

ETA: Tak więc, krok po kroku dla normalnego połączenia:

  1. Wpisujesz http://www.example.comw swojej przeglądarce.
  2. Komputer pyta resolvera DNS, z którego adresu IP powinien korzystać, kiedy chce rozmawiać www.example.com.
  3. Twój komputer łączy się z tym adresem IP i mówi, że chce z nim rozmawiać www.example.com(to Host:nagłówek w HTTP).
  4. Serwer sprawdza konfigurację, aby dowiedzieć się, co zrobić z żądaniem treści od www.example.com. Może się zdarzyć dowolna z poniższych sytuacji:
    • www.example.comznajduje się na liście jak ServerNamei ServerAliasdla VirtualHost- jeżeli tak, to będzie ona korzystać z konfiguracji dla tego VirtualHost dostarczenia zawartości.
    • Serwer w ogóle nie ma żadnych VirtualHostów - jeśli tak, to użyje konfiguracji w swoim httpd.conf do dostarczenia zawartości.
    • Serwer ma VirtualHosts, ale www.example.comnie jest wymieniony na żadnym z nich - jeśli tak, to pierwszy Virtualhost z listy zostanie wykorzystany do dostarczenia treści.
Jenny D.
źródło
Tak więc, jeśli część hosta żądania HTTP jest www.example.com, DNS rozpozna adres IP dla tej nazwy, a część hosta żądania HTTP będzie faktycznie adresem IP; po dotarciu do serwera apache będzie również wiedział, że żądanie jest wymagane, www.example.coma jeśli istnieje nazwa ServerNamelub ServerAliasdyrektywa dla tej nazwy domeny, może obsłużyć katalog główny dokumentu?
njp
Nie - część żądania HTTP jest nadal nazwą hosta. Wyjaśnię trochę więcej.
Jenny D
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.. Przetestowałem to. To prawda, ale nie jestem pewien, czy to pierwszy Virtualhost. Dziękuję za informację. +1
SMMousavi
19

Jeśli nie zdefiniujesz nazwy serwera, apache2 spróbuje zgadnąć z / etc / hosts. ServerAlias ​​jest opcjonalny. Najczęstszym przypadkiem użycia jest gdzie

ServerName example.com
ServerAlias www.example.com

To do Ciebie (a nie zadania apache2) należy upewnić się, że żądania docierają do adresu IP serwera WWW, np. Rejestracja domeny i konfiguracja rekordów DNS. Bardzo częstym sposobem na to (do testowania i programowania) bez rekordów domeny i dns jest ustawienie pliku / etc / hosts na komputerze lokalnym, aby przykład.com wskazywał adres IP twojego serwera.

192.168.0.12 example.com
192.168.0.12 www.example.com
Blau
źródło
0

Zdecydowanie polecam przeczytać oficjalną dokumentację na ten temat: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

napisano: „Jeśli w zestawie wirtualnych hostów zawierających najbardziej konkretny pasujący adres IP i kombinację portów nie znaleziono pasującej nazwy serwera ani nazwy serwera, to pierwszy wymieniony host wirtualny pasuje do tego, który zostanie użyty”. . Więc w twoim przypadku, jeśli uzyskasz dostęp do „foobar.com”, pierwszy wpis VirtualHost, który w jakiś sposób pasuje do IP 141.29.495.999, byłby użyty przez httpd

Ten sam dokument mówi „Wiele serwerów chce być dostępnych pod więcej niż jedną nazwą. Jest to możliwe dzięki dyrektywie ServerAlias”. Możesz więc traktować ServerAlias ​​po prostu jako dodatkowe wpisy ServerName.

Pierluigi Vernetto
źródło