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.com
a 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.999
ale potem miałem ServerName = 141.29.495.999
i ServerAlias
był 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 ServerName
lub ServerAlias
?
Lub coś. Człowieku, jestem zmieszany.
Odpowiedzi:
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.ServerName
IServerAlias
jest 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:
http://www.example.com
w swojej przeglądarce.www.example.com
.www.example.com
(toHost:
nagłówek w HTTP).www.example.com
. Może się zdarzyć dowolna z poniższych sytuacji:www.example.com
znajduje się na liście jakServerName
iServerAlias
dlaVirtualHost
- jeżeli tak, to będzie ona korzystać z konfiguracji dla tego VirtualHost dostarczenia zawartości.www.example.com
nie jest wymieniony na żadnym z nich - jeśli tak, to pierwszy Virtualhost z listy zostanie wykorzystany do dostarczenia treści.źródło
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.com
a jeśli istnieje nazwaServerName
lubServerAlias
dyrektywa dla tej nazwy domeny, może obsłużyć katalog główny dokumentu?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ę. +1Jeśli nie zdefiniujesz nazwy serwera, apache2 spróbuje zgadnąć z / etc / hosts. ServerAlias jest opcjonalny. Najczęstszym przypadkiem użycia jest gdzie
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.
źródło
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.
źródło