Når du først begynner å lære hvordan domenenavn, IP-adresser, webservere og nettsteder alle passer og fungerer sammen, kan det til tider være litt forvirrende eller overveldende. Hvordan er det hele satt opp til å fungere så greit? Dagens SuperUser Q&A innlegg har svarene på en nysgjerrig lesers spørsmål.
Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en samfunnsdrevet gruppe av spørsmål og svar-nettsteder.
Foto med tillatelse fra Rosmarie Voegtli (Flickr) .
Spørsmålet
SuperUser-leserbruker3407319 vil vite om webservere bare har ett nettsted hver:
Basert på det jeg forstår om DNS og koble et domenenavn til IP-adressen til webserveren et nettsted er lagret på, betyr det at hver webserver bare kan ha ett nettsted? Hvis webservere har mer enn ett nettsted, hvordan løses det hele slik at jeg får tilgang til nettstedet jeg vil ha uten problemer eller miksinger?
Har webservere bare ett nettsted hver, eller holder de flere?
Svaret
SuperUser-bidragsyter Bob har svaret for oss:
I utgangspunktet inkluderer nettleseren domenenavnet i HTTP-forespørselen, slik at webserveren vet hvilket domene som ble forespurt, og kan svare tilsvarende.
HTTP-forespørsler
Slik skjer din typiske HTTP-forespørsel:
1. Brukeren oppgir en URL i form http: // host: port / path.
2. Nettleseren trekker ut vertsdelen (domenen) av URL-en og oversetter den til en IP-adresse (om nødvendig) i en prosess som kalles navneløsning. Denne oversettelsen kan skje via DNS, men det trenger ikke (for eksempel den lokale vertsfilen på vanlige operativsystemer omgår DNS).
3. Nettleseren åpner en TCP-tilkobling til den angitte porten, eller er standard port 80 på den IP-adressen.
4. Nettleseren sender en HTTP-forespørsel. For HTTP / 1.1 ser det slik ut:
![]()
Verthodet er standard og kreves i HTTP / 1.1. Det ble ikke spesifisert i HTTP / 1.0-spesifikasjonen, men noen servere støtter det uansett.
Herfra har webserveren flere opplysninger som den kan bruke til å bestemme hva svaret skal være. Merk at det er mulig for en enkelt webserver å være bundet til flere IP-adresser.
- Den forespurte IP-adressen, fra TCP-kontakten (IP-adressen til klienten er også tilgjengelig, men dette brukes sjelden, og noen ganger for å blokkere / filtrere)
- Den forespurte porten fra TCP-kontakten
- Det forespurte vertsnavnet, som spesifisert i vertsoverskriften av nettleseren i HTTP-forespørselen
- Den forespurte banen
- Eventuelle andre overskrifter (informasjonskapsler osv.)
Som du ser ut til å ha lagt merke til, setter det vanligste delte hostingoppsettet i disse dager flere nettsteder på en enkelt IP-adresse: portkombinasjon, slik at bare verten kan skille mellom nettsteder.
Dette er kjent som en Navnbasert virtuell vert i Apache-land, mens Nginx kaller dem Servernavn i serverblokker , og IIS foretrekker Virtuell server .
Hva med HTTPS?
HTTPS er litt annerledes. Alt er identisk frem til etableringen av TCP-forbindelsen, men etter det må det opprettes en kryptert TLS-tunnel. Målet er å ikke lekke noen informasjon om forespørselen.
For å bekrefte at webserveren faktisk eier dette domenet, må webserveren sende et sertifikat signert av en pålitelig tredjepart. Nettleseren vil da sammenligne dette sertifikatet med domenet den ba om.
Dette gir et problem. Hvordan vet webserveren hvilket verts / nettstedets sertifikat de skal sende hvis den trenger å gjøre dette før HTTP-forespørselen blir mottatt?
Tradisjonelt ble dette løst ved å ha en dedikert IP-adresse (eller port) for hvert nettsted som krever HTTPS. Åpenbart har dette blitt problematisk ettersom vi går tom for IPv4-adresser.
Tast inn SNI (Servernavnindikasjon). Nettleseren sender nå vertsnavnet under TLS-forhandlingene, så webserveren har denne informasjonen tidlig nok til å sende riktig sertifikat. På webserveren er konfigurasjonen veldig lik hvordan HTTP virtuelle verter konfigureres.
Ulempen er at vertsnavnet nå sendes som ren tekst før kryptering, og er egentlig lekkert informasjon. Dette regnes vanligvis som en akseptabel avveining, men vurderer vertsnavnet normalt sett i en DNS-spørring uansett.
Hva hvis du ber om et nettsted bare etter IP-adresse?
Hva webserveren gjør når den ikke vet hvilken spesifikk vert du ba om, avhenger av webserverens implementering og konfigurasjon. Vanligvis er det et "standard", "catch-all" eller "fall back" nettsted spesifisert som vil gi svar på alle forespørsler som ikke eksplisitt spesifiserer en vert.
Dette standardnettstedet kan være sitt eget uavhengige nettsted (viser ofte en feilmelding), eller det kan være noen av de andre nettstedene på webserveren, avhengig av preferansene til webserveradministratoren.
Har du noe å legge til forklaringen? Lyd av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her .