If-Koubou

Serverele Web suportă doar un singur site?

Serverele Web suportă doar un singur site? (Cum să)

Când începeți să învățați cum se potrivesc și colaborează împreună numele de domeniu, adresele IP, serverele web și site-urile Web, poate fi uneori confuză sau copleșitoare uneori. Cum funcționează totul pentru a funcționa atât de bine? Postarea de astăzi SuperUser Q & A are răspunsurile la întrebările curioase ale cititorului.

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Cu dragostea lui Rosmarie Voegtli (Flickr).

Intrebarea

Cititorul de utilizatori SuperUser3407319 dorește să știe dacă serverele web dețin doar câte un singur site:

Pe baza a ceea ce am înțeles despre DNS și legarea unui nume de domeniu cu adresa IP a serverului web pe care este stocat un site web, înseamnă că fiecare server web poate conține doar un singur site web? Dacă serverele web dețin mai mult de un site Web, atunci cum se rezolvă totul, astfel încât să pot accesa site-ul pe care îl doresc fără probleme sau amestecări?

Serverele web dețin câte un singur site în parte sau mai mult?

Răspunsul

Contributor SuperUser Bob are răspunsul pentru noi:

În principiu, browserul include numele de domeniu în cererea HTTP, astfel încât serverul web să știe ce domeniu a fost solicitat și poate răspunde în mod corespunzător.

Solicitări HTTP

Iată cum se întâmplă solicitarea HTTP tipică:

1. Utilizatorul furnizează o adresă URL, sub forma http: // host: port / path.

2. Browserul extrage partea gazdă (domeniu) a adresei URL și o traduce într-o adresă IP (dacă este necesar) într-un proces cunoscut sub numele de rezoluție de nume. Această traducere poate apărea prin intermediul DNS, dar nu trebuie să fie (de exemplu, fișierul gazdă local pe sistemele de operare obișnuite ocolește DNS).

3. Browserul deschide o conexiune TCP la portul specificat sau implicit la portul 80 pe acea adresă IP.

4. Browserul trimite o cerere HTTP. Pentru HTTP / 1.1, se arată astfel:

Antetul gazdă este standard și este necesar în HTTP / 1.1. Nu a fost specificat în spec. HTTP / 1.0, dar unele servere îl acceptă oricum.

De aici, serverul web are mai multe informații pe care le poate utiliza pentru a decide care ar trebui să fie răspunsul. Rețineți că este posibil ca un singur server web să fie legat de mai multe adrese IP.

  • Adresa IP solicitată, din soclul TCP (adresa IP a clientului este de asemenea disponibilă, dar acest lucru este rar folosit și uneori pentru blocarea / filtrarea)
  • Portul solicitat, de la soclul TCP
  • Numele gazdă solicitat, așa cum este specificat în antetul gazdă de către browser în cererea HTTP
  • Calea cerută
  • Orice alte antete (cookie-uri etc.)

După cum pare să fi observat, cea mai obișnuită setare de găzduire partajată în zilele noastre pune mai multe site-uri pe o singură adresă IP: combinație de porturi, lăsând doar gazdă să facă diferența între site-uri web.

Acesta este cunoscut ca un gazdă virtuală bazată pe nume în Apache-land, în timp ce Nginx îi numește nume de server în blocuri de server, iar IIS preferă serverul virtual.

Despre HTTPS?

HTTPS este un pic diferit. Totul este identic până la stabilirea conexiunii TCP, dar după aceea trebuie să fie stabilit un tunel TLS criptat. Scopul este de a nu scurgeri de informații despre cerere.

Pentru a verifica dacă serverul web deține de fapt acest domeniu, serverul web trebuie să trimită un certificat semnat de o terță parte de încredere. Browserul va compara acest certificat cu domeniul solicitat.

Aceasta prezintă o problemă. Cum știe serverul web ce certificat de gazdă / site web să trimită dacă trebuie să facă acest lucru înainte ca cererea HTTP să fie primită?

În mod tradițional, acest lucru a fost rezolvat printr-o adresă IP (sau port) dedicată pentru fiecare site web care necesită HTTPS. Evident, acest lucru a devenit problematic, pe măsură ce rupem adresele IPv4.

Introduceți SNI (denumirea numelui serverului). Browserul trece acum numele gazdei în timpul negocierilor TLS, astfel încât serverul web are aceste informații destul de devreme pentru a trimite certificatul corect. Pe partea serverului web, configurația este foarte asemănătoare cu modul în care sunt configurate gazdele virtuale HTTP.

Dezavantajul este că numele gazdei este acum trecut ca text simplu înainte de criptare și este, în esență, scurgeri de informații. Acesta este de obicei considerat un compromis acceptabil, deși considerând că numele gazdei este în mod normal expus într-o interogare DNS oricum.

Ce se întâmplă dacă solicitați un site web numai prin adresa IP?

Ce face serverul web atunci când nu știe care gazdă specifică pe care ați solicitat-o ​​depinde de implementarea și configurarea serverului web. În mod obișnuit, există un site de tip "implicit", "captură totală" sau "cadă înapoi" specificat care va oferi răspunsuri la toate solicitările care nu specifică în mod explicit o gazdă.

Acest site web implicit poate fi propriul său site independent (afișând adesea un mesaj de eroare) sau ar putea fi oricare dintre celelalte site-uri de pe serverul web, în ​​funcție de preferințele administratorului serverului web.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.