Ένας διακομιστής ανάπτυξης που απαντά στον φορητό υπολογιστή και πουθενά αλλού είναι συνήθως δεσμευμένος στη λάθος διεύθυνση. Ένας διακομιστής που δέχεται τη σύνδεση αλλά απορρίπτει τη σελίδα συνήθως αποτυγχάνει σε έναν έλεγχο ονόματος κεντρικού υπολογιστή. Πρόκειται για διαφορετικά σφάλματα με διαφορετικές διορθώσεις, και η επιλογή της σωστής διαμόρφωσης εξαρτάται από το ποιος πρέπει να φτάσει στον χώρο εργασίας και πώς φτάνει.

Τρεις ερωτήσεις καθορίζουν την απάντηση: ποιος συνδέεται, ποια διεύθυνση μπορεί να φτάσει και αν η ζωντανή επαναφόρτωση πρέπει να λειτουργεί γι' αυτόν.

Ξεκινήστε από το socket, όχι από το αρχείο διαμόρφωσης

Διαβάστε σε τι έχει πραγματικά δεσμευτεί η τρέχουσα διεργασία μέσα στο ίδιο δίκτυο περιβάλλον που την ξεκίνησε, γιατί ένα container ή ένα namespace μπορεί να κατέχει ένα socket που το κέλυφος του κεντρικού υπολογιστή δεν βλέπει. Η στήλη ακρόασης απαντά στην πρώτη ερώτηση: μόνο τοπική διαδρομή, μία συγκεκριμένη διεπαφή ή κάθε διεπαφή.

ss -ltn '( sport = :8080 )'
ss -ltnp | grep node

Μια διεύθυνση loopback είναι η ασφαλής προεπιλογή και άχρηστη για απομακρυσμένο πελάτη. Η δέσμευση μπαλαντέρ είναι βολική και εκθέτει τη θύρα σε κάθε διεπαφή που έχει διαδρομή, κάτι ευρύτερο από ό,τι σκοπεύουν οι περισσότεροι σε ένα μηχάνημα που μεταφέρει και σήραγγα. Μια συγκεκριμένη διεύθυνση είναι η μεσαία επιλογή και λειτουργεί μόνο αν η διεπαφή κατέχει αυτή τη διεύθυνση τη στιγμή που δημιουργείται το socket. Η διάκριση έχει σημασία γιατί δύο από αυτές τις τρεις δεσμεύσεις φαίνονται ίδιες στον περιηγητή και συμπεριφέρονται εντελώς διαφορετικά όταν υπάρξει δεύτερη διεπαφή.

Ευθυγραμμιστείτε με αυτή την παρατήρηση πριν αγγίξετε διαδρομές ή κανόνες τείχους προστασίας. Αν η διεργασία ακούει στη λάθος διεύθυνση, κανένα policy routing δεν θα κάνει τον πελάτη να τη φτάσει.

Επιλέξτε τη διεύθυνση δέσμευσης κατά το ποιος πρέπει να τη φτάσει

Αν μόνο εσείς σε αυτό το μηχάνημα χρειάζεστε τη σελίδα, κρατήστε τη δέσμευση loopback και σταματήστε. Αν ένας συνάδελφος στην ίδια σήραγγα τη χρειάζεται, δεσμεύστε τη διεύθυνση της διεπαφής της σήραγγας και αφήστε το τείχος προστασίας να επιτρέπει μόνο αυτή την πηγή. Η δημοσίευση ενός διακομιστή ανάπτυξης πέρα από τους ανθρώπους που τον δοκιμάζουν ενεργά είναι μια συνήθεια που τελικά εκθέτει τον χώρο εργασίας στο διαδίκτυο.

Αν ένας περιηγητής μέσα σε container πρέπει να φτάσει τον διακομιστή, η διεύθυνση δέσμευσης πρέπει να είναι μία προς την οποία το δίκτυο του container μπορεί να δρομολογήσει, και αυτή συχνά δεν είναι η διεύθυνση που επιλύει ο κεντρικός υπολογιστής για τον εαυτό του. Αποφασίστε την περίπτωση πριν επεξεργαστείτε τη διαμόρφωση, γιατί οι τρεις περιπτώσεις παράγουν τρεις διαφορετικές τιμές και μόνο μία είναι σωστή. Η εικασία εδώ σπαταλά περισσότερο χρόνο από οποιοδήποτε άλλο μέρος της ρύθμισης.

Στη συνέχεια ορίστε τη διεύθυνση στη μορφή που διαβάζει πραγματικά ο εκκινητής σας. Ένα αρχείο διαμόρφωσης και ένα script που χτίζει τον διακομιστή προγραμματιστικά δεν καταναλώνουν τις ίδιες επιλογές:

devServer: {
  host: "10.77.0.20",
  port: 8080,
  allowedHosts: ["dev.corp.example"],
}

Η διεύθυνση σε αυτό το απόσπασμα είναι ενδεικτική και αντιπροσωπεύει τη διεύθυνση VPN που κατέχει ο κεντρικός υπολογιστής. Αν το έργο χτίζει τον διακομιστή με new WebpackDevServer(options, compiler), περάστε τις επιλογές μέσω του ορίσματος του κατασκευαστή αντί γι' αυτό, γιατί η ξεχωριστή ιδιότητα devServer στη διαμόρφωση του webpack δεν εξετάζεται σε αυτή τη διαδρομή. Αυτή η διαφορά μεταξύ του αρχείου διαμόρφωσης και του Node API πιάνει όσους αντιγράφουν ένα απόσπασμα σε ένα έργο που δεν το διαβάζει ποτέ. Η τεκμηρίωση του dev-server διαχωρίζει τα δύο στυλ εκκίνησης και είναι η αναφορά με την οποία πρέπει να ελέγχεται η έκδοση που χρησιμοποιείται.

Ταιριάξτε τον έλεγχο ονόματος κεντρικού υπολογιστή με τα ονόματα που εγκρίνετε

Ο έλεγχος ονόματος κεντρικού υπολογιστή υπάρχει για να εμποδίζει μια σελίδα που σερβίρεται από όνομα ελεγχόμενο από επιτιθέμενο να μιλά στον διακομιστή ανάπτυξης μέσω του περιηγητή. Η απενεργοποίησή του με allowedHosts: "all" αφαιρεί αυτή την προστασία, και η ευκολία σπάνια αξίζει τον κόπο σε μηχάνημα που φτάνει εσωτερικές υπηρεσίες. Ο έλεγχος ικανοποιείται φθηνά σωστά μόλις ξέρετε ποια ονόματα θα στείλει ο περιηγητής.

Καταγράψτε τα ακριβή ονόματα που θα χρησιμοποιήσετε, συμπεριλαμβανομένου του ιδιωτικού ονόματος που επιλύεται στη διεύθυνση της σήραγγας. Αν ο πελάτης επιλύει ένα όνομα σε διαφορετική διεύθυνση από αυτή που δεσμεύσατε, έχετε πρόβλημα επίλυσης ονομάτων και όχι διαμόρφωσης διακομιστή, και η προσθήκη του ονόματος στη λίστα επιτρεπόμενων δεν θα το διορθώσει. Επιβεβαιώστε την επίλυση από τον πελάτη, όχι από τον διακομιστή.

Κρατήστε τα τρία στοιχεία ελέγχου ξεχωριστά στο μυαλό σας: η διεύθυνση δέσμευσης αποφασίζει ποιες διεπαφές δέχονται τη σύνδεση, η λίστα επιτρεπόμενων αποφασίζει ποιες κεφαλίδες Host γίνονται δεκτές και η ταυτοποίηση αποφασίζει ποιος επιτρέπεται να μπει. Μόνο το τρίτο είναι έλεγχος πρόσβασης, και ένας διακομιστής ανάπτυξης συνήθως δεν έχει κανένα. Ούτε μια διεύθυνση σήραγγας είναι μηχανισμός ταυτοποίησης, αφού όποιος μπορεί να δρομολογήσει προς αυτή είναι ήδη μέσα στο όριο στο οποίο βασιστήκατε.

Επαληθεύστε τη σελίδα και το socket ζωντανής επαναφόρτωσης μαζί

Φορτώστε ένα νέο αίτημα από τον προβλεπόμενο πελάτη με το διαμορφωμένο σχήμα και διαβάστε το αποτέλεσμα αντί για την προσωρινή μνήμη. Για HTTPS κρατήστε το αναμενόμενο όνομα κεντρικού υπολογιστή και την επικύρωση πιστοποιητικού, γιατί μια προειδοποίηση περιηγητή δεν είναι επιτυχής δοκιμή αποδοχής. Μια σελίδα που αποδίδεται ενώ η ζωντανή επαναφόρτωση αποτυγχάνει σιωπηλά είναι η πιο συνηθισμένη μερική επιτυχία εδώ και είναι εύκολο να χαθεί σε έναν γρήγορο έλεγχο.

curl -sS -o /dev/null -w "%{http_code} %{remote_ip}\n" http://dev.corp.example:8080/
curl -sS -i http://10.77.0.20:8080/ | head -n 5

Έπειτα ανοίξτε τα διαγνωστικά δικτύου του περιηγητή και παρακολουθήστε τη σύνδεση WebSocket. Μια σελίδα μπορεί να φορτωθεί μέσω ενός ονόματος κεντρικού υπολογιστή, θύρας και σχήματος ενώ το socket επαναφόρτωσης χρησιμοποιεί άλλο, γι' αυτό πρέπει να ελέγχονται χωριστά. Διαμορφώστε το τεκμηριωμένο URL πελάτη μόνο όταν η αναπτυγμένη διαδρομή χρειάζεται πραγματικά διαφορετική τιμή, και προτιμήστε να διορθώσετε τη διαδρομή αντί να μάθετε στον πελάτη μια παράκαμψη.

Καταγράψτε τη διεύθυνση ακρόασης, το αποδεκτό όνομα, την επιτρεπόμενη πηγή και τα δύο αποτελέσματα στις σημειώσεις του έργου. Αυτή η καταγραφή επιβιώνει στον επόμενο άνθρωπο που θα ξεκινήσει τον χώρο εργασίας και θα αναρωτηθεί γιατί η σελίδα φορτώνει αλλά δεν ανανεώνεται ποτέ.

Σχετικά άρθρα