Web poslužitelji drže samo jednu web stranicu?
Kada prvi put počnete učiti kako se imena domena, IP adrese, web-poslužitelji i web-lokacije uklapaju i djeluju zajedno, to može biti malo zbunjujuće ili porazno. Kako je sve to tako glatko? Današnja postova s pitanjima o odgovorima korisnika imaju odgovore na pitanja znatiželjnog čitatelja.
Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.
Fotografija ljubaznošću Rosmarie Voegtli (Flickr).
Pitanje
Čitač SuperUser user3407319 želi znati imaju li web poslužitelji samo jednu web-lokaciju:
Na temelju onoga što razumijem o DNS-u i povezivanja naziva domene s IP adresom web-poslužitelja na kojem je web-lokacija pohranjena, znači li to da svaki web-poslužitelj može imati samo jednu web-lokaciju? Ako web poslužitelji imaju više od jedne web-lokacije, kako se sve to rješava tako da mogu pristupiti web-lokaciji koju želim bez problema ili miješati?
Da li web-poslužitelji drže samo jednu web-lokaciju ili imaju više?
Odgovor
Doprinositelj SuperUser Bob ima odgovor za nas:
U osnovi, preglednik sadrži naziv domene u HTTP zahtjevu tako da web-poslužitelj zna koja je domena zatražena i može u skladu s tim odgovoriti.
HTTP zahtjevi
Evo kako se događa vaš tipični HTTP zahtjev:
1. Korisnik unosi URL u obliku http: // host: port / path.
2. Preglednik izdvaja dio URL-a hosta (domene) i prevodi ga u IP adresu (ako je potrebno) u procesu poznat kao razlučivanje imena. Taj se prijevod može dogoditi putem DNS-a, ali ne mora (na primjer, datoteka lokalnog hosta na uobičajenim operacijskim sustavima zaobilazi DNS).
3. Preglednik otvara TCP vezu s navedenim portom ili se na toj IP adresi zadano postavlja na priključak 80.
4. Preglednik šalje HTTP zahtjev. Za HTTP / 1.1 izgleda ovako:
Zaglavlje hosta je standardno i potrebno je u HTTP / 1.1. To nije navedeno u specifikacijama HTTP / 1.0, ali neki poslužitelji ga ipak podržavaju.
Odavde, web poslužitelj ima nekoliko informacija koje može koristiti za odlučivanje o tome što bi trebao biti odgovor. Imajte na umu da je moguće da jedan web poslužitelj bude vezan za više IP adresa.
- Tražena IP adresa iz TCP utičnice (IP adresa klijenta je također dostupna, ali se to rijetko koristi, a ponekad za blokiranje / filtriranje)
- Traženi port iz TCP utičnice
- Traženo ime hosta, kao što je navedeno u zaglavlju hosta preglednika u HTTP zahtjevu
- Traženi put
- Sve ostale zaglavlja (kolačići, itd.)
Kao što ste, čini se, primijetili, najčešći način postavljanja hostinga ovih dana stavlja više web-lokacija na jednu IP adresu: kombinacija priključaka, ostavljajući samo host da razlikuje web-lokacije.
To je poznato kao Virtualni host na temelju imena u Apache-landu, dok ih Nginx naziva Imena poslužitelja u poslužiteljskim blokovima, a IIS preferira virtualni poslužitelj.
Što je s HTTPS-om?
HTTPS je malo drugačiji. Sve je identično sve do uspostave TCP veze, ali nakon toga mora biti uspostavljen šifrirani TLS tunel. Cilj je ne propuštati informacije o zahtjevu.
Da biste provjerili je li web-poslužitelj zapravo vlasnik ove domene, web-poslužitelj mora poslati potvrdu koju je potpisala pouzdana treća strana. Preglednik će zatim usporediti ovaj certifikat s domenom koju je tražio.
To predstavlja problem. Kako web-poslužitelj zna koji certifikat hosta / web-lokacije treba poslati prije nego što HTTP zahtjev primi?
Tradicionalno, to je riješeno tako da je za svaku web stranicu koja zahtijeva HTTPS dodijeljena namjenska IP adresa (ili port). Očito, ovo je postalo problematično jer nam ponestane IPv4 adresa.
Unesite SNI (oznaka naziva poslužitelja). Preglednik sada prelazi ime hosta tijekom TLS pregovora, tako da web-poslužitelj ima te informacije dovoljno rano da pošalje ispravnu potvrdu. Na strani web poslužitelja, konfiguracija je vrlo slična načinu na koji su konfigurirani HTTP virtualni hostovi.
Loša strana je ime hosta koje je sada proslijeđeno kao običan tekst prije enkripcije, te je u osnovi propušteno. To se obično smatra prihvatljivim kompromisom, iako se uzimajući u obzir da je naziv hosta obično izložen u DNS upitu.
Što ako zatražite web stranicu samo IP adresom?
Što web-poslužitelj radi kada ne zna koji je određeni host zatražio ovisi o implementaciji i konfiguraciji web-poslužitelja. Tipično, navedeno je web-mjesto "zadano", "uhvatiti sve" ili "vratiti se" koje će dati odgovore na sve zahtjeve koji izričito ne navode host.
Ova zadana web-lokacija može biti vlastita neovisna web-lokacija (često prikazuje poruku o pogrešci), ili može biti bilo koja druga web-lokacija na web-poslužitelju, ovisno o postavkama administratora web-poslužitelja..
Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.