Οι διακομιστές Web διατηρούν μόνο έναν ιστότοπο;
Όταν αρχίσετε να μαθαίνετε πώς τα ονόματα τομέων, οι διευθύνσεις IP, οι διακομιστές ιστού και οι ιστότοποι ταιριάζουν και συνεργάζονται, μπορεί να είναι κάποιες φορές σύγχυση ή συντριπτική. Πώς είναι όλα ρυθμισμένα να λειτουργούν τόσο ομαλά; Η σημερινή θέση Q & A της SuperUser έχει τις απαντήσεις σε ερωτήσεις περίεργου αναγνώστη.
Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με το SuperUser - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που κατευθύνεται από τους ιστότοπους ερωτήσεων & απαντήσεων.
Φωτογραφία ευγενική προσφορά του Rosmarie Voegtli (Flickr).
Το ερώτημα
Ο αναγνώστης SuperUser user3407319 θέλει να μάθει αν οι διακομιστές ιστού περιέχουν μόνο έναν ιστότοπο ο καθένας:
Με βάση αυτό που καταλαβαίνω σχετικά με το DNS και τη σύνδεση ενός ονόματος τομέα με τη διεύθυνση IP του διακομιστή ιστού, αποθηκεύεται ένας ιστότοπος, σημαίνει ότι κάθε web server μπορεί να κρατήσει μόνο έναν ιστότοπο; Εάν οι διακομιστές web διατηρούν περισσότερους από έναν ιστότοπους, τότε πώς θα επιλυθούν όλα, ώστε να μπορώ να αποκτήσω πρόσβαση στην ιστοσελίδα που θέλω χωρίς προβλήματα ή ανακατεύθυνση?
Οι διακομιστές ιστού κρατούν μόνο έναν ιστότοπο ο καθένας ή κατέχουν περισσότερα?
Η απάντηση
Ο συνεργάτης του SuperUser Bob έχει την απάντηση για εμάς:
Βασικά, το πρόγραμμα περιήγησης περιλαμβάνει το όνομα τομέα στην αίτηση HTTP, έτσι ώστε ο διακομιστής ιστού να γνωρίζει τον τομέα που ζητήθηκε και να απαντήσει ανάλογα.
Αιτήματα HTTP
Εδώ εμφανίζεται το τυπικό αίτημα HTTP:
1. Ο χρήστης παρέχει μια διεύθυνση URL, στη μορφή http: // host: port / path.
2. Το πρόγραμμα περιήγησης αποσπά το τμήμα φιλοξενίας (τομέα) της διεύθυνσης URL και το μεταφράζει σε μια διεύθυνση IP (αν είναι απαραίτητο) σε μια διαδικασία γνωστή ως ανάλυση ονόματος. Αυτή η μετάφραση μπορεί να πραγματοποιηθεί μέσω του DNS, αλλά δεν χρειάζεται να (για παράδειγμα, το αρχείο τοπικών κεντρικών υπολογιστών στα κοινά λειτουργικά συστήματα παρακάμπτει το DNS).
3. Το πρόγραμμα περιήγησης ανοίγει μια σύνδεση TCP στην καθορισμένη θύρα ή έχει προεπιλεγμένη θύρα 80 στη συγκεκριμένη διεύθυνση IP.
4. Το πρόγραμμα περιήγησης στέλνει ένα αίτημα HTTP. Για το HTTP / 1.1, μοιάζει με αυτό:
Η κεφαλίδα κεντρικού υπολογιστή είναι τυπική και απαιτείται σε HTTP / 1.1. Δεν προσδιορίστηκε στο spec HTTP / 1.0, αλλά ορισμένοι διακομιστές το υποστηρίζουν ούτως ή άλλως.
Από εδώ, ο διακομιστής ιστού έχει αρκετά στοιχεία που μπορεί να χρησιμοποιήσει για να αποφασίσει ποια θα είναι η απάντηση. Σημειώστε ότι είναι δυνατό για έναν ενιαίο διακομιστή web να δεσμεύεται σε πολλαπλές διευθύνσεις IP.
- Η απαιτούμενη διεύθυνση IP, από την υποδοχή TCP (η διεύθυνση IP του πελάτη είναι επίσης διαθέσιμη, αλλά σπάνια χρησιμοποιείται και μερικές φορές για το μπλοκάρισμα / το φιλτράρισμα)
- Η ζητούμενη θύρα, από την υποδοχή TCP
- Το ζητούμενο όνομα κεντρικού υπολογιστή, όπως καθορίζεται στην κεφαλίδα του κεντρικού υπολογιστή από το πρόγραμμα περιήγησης στο αίτημα HTTP
- Η διαδρομή που ζητήσατε
- Οποιεσδήποτε άλλες κεφαλίδες (cookies κ.λπ.)
Όπως φαίνεται να έχετε παρατηρήσει, η πιο κοινή ρύθμιση κοινής χρήσης φιλοξενίας αυτών των ημερών βάζει πολλαπλούς ιστότοπους σε μια ενιαία διεύθυνση IP: συνδυασμός θυρών, αφήνοντας μόνο τον κεντρικό υπολογιστή να διαφοροποιήσει τις ιστοσελίδες.
Αυτό είναι γνωστό ως εικονικός κεντρικός υπολογιστής που βασίζεται σε όνομα στο Apache-land, ενώ ο Nginx ονομάζει τα ονόματα διακομιστών σε μπλοκ διακομιστών και η υπηρεσία IIS προτιμά τον εικονικό διακομιστή.
Τι γίνεται με το HTTPS?
Το HTTPS είναι λίγο διαφορετικό. Τα πάντα είναι ίδια με τη δημιουργία της σύνδεσης TCP, αλλά μετά από αυτό πρέπει να δημιουργηθεί μια κρυπτογραφημένη σήραγγα TLS. Ο στόχος είναι να μην διαρρεύσει καμία πληροφορία σχετικά με το αίτημα.
Για να επαληθεύσουμε ότι ο διακομιστής ιστού κατέχει πραγματικά αυτόν τον τομέα, ο διακομιστής ιστού πρέπει να στείλει ένα πιστοποιητικό που έχει υπογραφεί από αξιόπιστο τρίτο μέρος. Στη συνέχεια, το πρόγραμμα περιήγησης θα συγκρίνει αυτό το πιστοποιητικό με τον τομέα που ζήτησε.
Αυτό παρουσιάζει ένα πρόβλημα. Πώς γνωρίζει ο διακομιστής ιστού το πιστοποιητικό που στέλνει ο κεντρικός υπολογιστής / ιστότοπος εάν πρέπει να το κάνει πριν λάβει την αίτηση HTTP?
Παραδοσιακά, αυτό επιλύθηκε έχοντας μια αποκλειστική διεύθυνση IP (ή θύρα) για κάθε ιστότοπο που απαιτεί HTTPS. Προφανώς, αυτό έχει καταστεί προβληματικό καθώς εξαντλούμε τις διευθύνσεις IPv4.
Καταχωρίστε SNI (Ένδειξη ονόματος διακομιστή). Το πρόγραμμα περιήγησης περάσει τώρα το όνομα του κεντρικού υπολογιστή κατά τη διάρκεια των διαπραγματεύσεων TLS, οπότε ο διακομιστής ιστού έχει τις πληροφορίες αυτές αρκετά νωρίς για να στείλει το σωστό πιστοποιητικό. Στην πλευρά του εξυπηρετητή ιστού, η διαμόρφωση είναι πολύ παρόμοια με τον τρόπο με τον οποίο διαμορφώνονται οι εικονικοί κεντρικοί υπολογιστές HTTP.
Το μειονέκτημα είναι ότι το όνομα του κεντρικού υπολογιστή μεταφέρεται πλέον ως απλό κείμενο πριν από την κρυπτογράφηση και είναι ουσιαστικά διαρροή πληροφοριών. Αυτό θεωρείται συνήθως αποδεκτό συμβιβασμό, αν και το όνομα του κεντρικού υπολογιστή εκτίθεται κανονικά σε ένα ερώτημα DNS ούτως ή άλλως.
Τι θα κάνετε εάν ζητήσετε μια ιστοσελίδα μόνο με διεύθυνση IP?
Τι κάνει ο διακομιστής ιστού όταν δεν γνωρίζει ποιος συγκεκριμένος κεντρικός υπολογιστής ζητήσατε εξαρτάται από την υλοποίηση και τη διαμόρφωση του διακομιστή ιστού. Συνήθως, έχει οριστεί ένας ιστότοπος "προεπιλογή", "catch-all" ή "fall back" που θα παρέχει απαντήσεις σε όλα τα αιτήματα που δεν καθορίζουν ρητά έναν κεντρικό υπολογιστή.
Αυτός ο προεπιλεγμένος ιστότοπος μπορεί να είναι ο δικός του ανεξάρτητος ιστότοπος (ο οποίος συχνά εμφανίζει ένα μήνυμα σφάλματος) ή θα μπορούσε να είναι οποιοσδήποτε από τους άλλους ιστότοπους του διακομιστή ιστού ανάλογα με τις προτιμήσεις του διαχειριστή ιστού.
Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.