Jak masz jeden adres IP i wiele stron internetowych?

27

Jak mogę go mieć tam, gdzie mam jeden adres IP, który znajduje się w Internecie, ale wiele nazw internetowych? Na przykład, gdy firma hostingowa ma wspólne IP, ale otrzymuję nieograniczoną liczbę nazw domen (wraz ze wszystkimi innymi osobami w tym polu).

Mam pudełko w Internecie, ale chcę wskazać inną maszynę, która ma inną stronę internetową, gdy ktoś wpisze inną stronę www ... (stoi obok niej w innym pudełku). Czy to wszystko subdomeny? Dziękuję Ci.

Jestem firmą hostingową

Jasio
źródło

Odpowiedzi:

36

Jest to część protokołu HTTP 1.1.

W szczególności protokół HTTP 1.1 zawiera nagłówek o nazwie „host:”, który określa, do której strony internetowej na określonym serwerze próbuje uzyskać dostęp klient.

Więc jeśli snoopy.net i woodstock.org oba współużytkują 192.0.32.10, a twoja przeglądarka próbuje uzyskać zawartość z http://snoopy.net/doghouse określonego żądania http wyglądałby tak:

GET /doghouse HTTP/1.1
Host: snoopy.net

Jeśli pożądany adres URL http://woodstock.org/seedsbędzie wyglądał, żądanie będzie wyglądać

GET /seeds HTTP/1.1
Host: woodstock.org

W obu przypadkach między komputerem a portem 80 serwera znajdowałoby się gniazdo tcp. Serwer wiedziałby, aby uzyskać zawartość z /var/www/snoopy.net lub /var/www/woodstock.org/ na podstawie nagłówka Host.

Istnieją inne nagłówki plików cookie i inne rzeczy, takie jak typ przeglądarki i dozwolona zawartość, ale nagłówek „Host” jest tym, co pozwala serwerowi internetowemu wiedzieć, która wirtualna strona internetowa jest pożądana.

W RFC2616 jest więcej .

Dlatego też strony https * muszą *** mieć swój własny adres IP - wymiana transakcji ssl i weryfikacja certyfikatu odbywają się przed transakcją http, więc serwer http nie będzie wiedział o wydaniu certyfikatu dla woodstock. org ”lub„ snoopy.net ”, gdy odbierze połączenie https na porcie 443 192.0.32.10.


edytować

** w komentarzach Grawity wskazuje, że w specyfikacji TLS istnieją rozszerzenia protokołu SSL, które pozwalają serwerowi dowiedzieć się, do której strony użytkownik próbuje uzyskać dostęp, i że większość współczesnych przeglądarek internetowych ma te rozszerzenia, więc to też musi być trochę zbyt silny.

Chris
źródło
więc serwer zobaczyłby ten nagłówek i przeniósł go na właściwą stronę? Czy możesz mieć wiele witryn w tym samym porcie?
Johnny
1
Właśnie po to jest. Jeden „serwer”, taki jak apache, ma port 80 z 192.0.32.10, który ma wiele wpisów DNS, z których każdy jest „witryną”. Serwer wie, jaka jest żądana witryna na podstawie nagłówka „hosta”.
Chris
3
DNS jest skonfigurowany tak, aby obie nazwy wskazywały ten sam adres IP, na którym nasłuchuje serwer. Serwer odbiera połączenia z tym samym adresem IP i tym samym portem, ale gdy przeglądarka powie mu „Chcę SiteA.com”, wie, że musi podać inną treść niż wtedy, gdy zostanie poproszony o SiteB.com.
Massimo
2
Aby jeszcze bardziej wyjaśnić: obie strony są rozróżniane na poziomie protokołu HTTP, a nie na poziomie TCP / IP. To tak, jakby ktoś zadzwonił do twojego biura i poprosił o rozmowę z Johnem lub Susan: numer telefonu jest taki sam, ale może z niego korzystać więcej niż jedna osoba.
Massimo
1
Większość przeglądarek i serwerów obsługuje teraz TLS Server Name Indication, co eliminuje wymóg jednego adresu IP na stronę internetową.
grawity
12

Jest coś, co wszystkie nowoczesne przeglądarki wysyłają wraz z żądaniem, zwane nagłówkiem „Host:”.

Rzeczywiste żądanie firefox wysyłane dla tej strony to:

Host: superuser.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Zaakceptuj: tekst / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8
Accept-Language: en-us, en; q = 0,5
Zaakceptuj-kodowanie: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Połączenie: utrzymuj przy życiu

Jak widać,

Host: superuser.com
bit identyfikuje daną stronę internetową.

W usługach IIS i Apache można skonfigurować wirtualne witryny sieci Web, które akceptują tylko żądania z określonej kombinacji adresu IP / hosta.

Jeśli chodzi o konkretny problem, musisz przeczytać, w jaki sposób Twoja firma hostingowa chce, abyś poprosił o konfigurację.

John Gietzen
źródło
Należy również wspomnieć, że musisz ustawić wiele wpisów DNS dla swojego adresu IP.
Tadeusz A. Kadłubowski
@Tadeusz: Możliwe jest ustawienie wieloznacznych wpisów DNS, więc nie jest to absolutnie konieczne.
John Gietzen
6

Technika hostowania więcej niż jednej domeny / subdomeny na jednym adresie IP / hoście nazywa się hostami wirtualnymi . Żądanie HTTP get zawiera nazwę domeny, dla której są one żądane, co pozwala serwerowi internetowemu dopasować żądanie do konkretnej domeny wirtualnej.

Jeśli masz wiele hostów fizycznych wewnętrznie za pomocą tylko jednego zewnętrznego adresu IP, możesz spróbować skonfigurować odwrotne proxy, aby przekazywać żądania na właściwy komputer / wewnętrzny adres IP.

3dinfluence
źródło
lub oczywiście inne serwery HTTP na różnych portach.
Chopper3
Tak, jest to również opcja. Ale ludzie nie są przyzwyczajeni do określania portu podczas wpisywania adresu URL, więc zarezerwowałbym to rozwiązanie na kilka sytuacji, takich jak interfejs administratora.
3dinfluence 27.01.10
3

Funkcja na twoim serwerze WWW jest zwykle nazywana „wirtualnymi hostami”. Po wskazaniu pozycji dns, aby wskazywały na jeden adres IP (jak wspomniano w innych odpowiedziach), serwer będzie następnie serwował różne witryny w zależności od żądanego hosta.

Jeśli chodzi o wskazanie innego pola, to idzie. Możesz skonfigurować przekierowania na większości serwerów internetowych, jeśli najpierw spodziewasz się zapytania. Jeśli mówisz o subdomenach, wystarczy wskazać każdą z subdomen na inny adres IP.

tzn. host.com -> IP 1, a następnie www.host.com -> IP 2 i mail.host.com -> IP 3

Jeśli chcesz uzyskać bardziej szczegółowe odpowiedzi, musisz powiedzieć, jakie oprogramowanie serwera WWW działa na jakim systemie operacyjnym.

Może się okazać, że ServeFault jest lepszym miejscem na to pytanie.

Colin Newell
źródło
1

W skrócie...

Jeden - Ustaw wpisy DNS dla różnych domen tak, aby wskazywały na twoje urządzenie.

Dwa - zgodnie z opisem innych, skonfiguruj swój serwer internetowy (nie mówisz, który), aby pasował do żądanej nazwy hosta.

W ten sposób wszystkie żądania dla wszystkich domen trafiają na ten sam komputer, a jego konfiguracja pobiera żądaną domenę i kieruje ją do odpowiedniego folderu zawierającego zawartość tej witryny.

Garry
źródło
0

Z twojego pytania wynika, że ​​masz osobny serwer fizyczny dla drugiej strony internetowej. W takim przypadku nie będzie można użyć jednego adresu IP dla dwóch serwerów. Możesz albo a) uzyskać drugi publiczny adres IP dla drugiego hosta, albo b) skonfigurować inteligentny serwer proxy, który będzie przekazywał żądania do różnych serwerów w sieci wewnętrznej na podstawie nagłówków hosta. Jestem pewien, że b) jest możliwe, ale nie mam pojęcia, jak to działa, więc będziesz musiał zapytać kogoś innego, czy właśnie to próbujesz zrobić.

Catherine MacInnes
źródło
0

Jeśli dobrze czytam twoje pytanie, masz dwa różne komputery współdzielące adres IP przez NAT (Network Address Translation)? Jeśli tak, musisz mieć jedną stronę nasłuchującą na innym porcie (nie 80) - nie ma dobrego sposobu, aby router wysyłał żądania do różnych komputerów na podstawie metadanych HTTP „Host”. Lepiej jest po prostu uzyskać drugi adres IP dla drugiego serwera.

CarlF
źródło