Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

ERR_TOO_MANY_REDIRECTS πίσω από CDN: οι δύο ρυθμίσεις που κάνουν βρόχο.

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

Από EuroVPS EngineeringΤο μηχανοστάσιο

5 λεπτά ανάγνωσης
Σε αυτό το άρθρο 4 ενότητες
Εν συντομία
  • Το ζεύγος που ψάχνετε όταν ένα site πίσω από CDN επιστρέφει ERR_TOO_MANY_REDIRECTS: ένα SSL mode του CDN που φέρνει το origin σε απλό HTTP, και ένα origin που εξαναγκάζει την ανακατεύθυνση HTTP σε HTTPS χωρίς να ελέγχει τι έκανε ήδη ο proxy.
  • Δύο σφάλματα, το καθένα αβλαβές μόνο του. Πολλά origins σερβίρουν HTTP πίσω από ένα CDN που τερματίζει το TLS, και πολλά origins εξαναγκάζουν HTTPS. Μόνο τα δύο μαζί κάνουν βρόχο.
  • Ο βρόχος μπορεί να μην αφήσει καμία εγγραφή στο access log, επειδή το επίπεδο που απαντά την ανακατεύθυνση μπορεί να μην καταγράφει τα συνηθισμένα αιτήματα. Η σιωπή μοιάζει με απουσία κίνησης και στρέφει την αναζήτηση προς τη λάθος κατεύθυνση.
  • Αναπαράγετέ τον με ένα αίτημα προς το origin, από τη διαδρομή που ακολουθούν οι επισκέπτες, και μετά διορθώστε και τα δύο άκρα, ώστε ο βρόχος να μην μπορεί να σχηματιστεί όπως κι αν προβάλλεται το site.

Η ενεργοποίηση του proxy του CDN μπροστά από ένα origin που εξαναγκάζει HTTPS αρκεί για να ξεκινήσει ο βρόχος. Και οι δύο ρυθμίσεις είναι λογικές, και καμία από μόνη της δεν χαλάει τίποτα. Το να αλλάξετε μία ρύθμιση και να δοκιμάσετε από μια διαδρομή που παρακάμπτει το CDN μοιάζει με διόρθωση, ενώ κάθε πραγματικός επισκέπτης εξακολουθεί να κάνει βρόχο.

Ο μηχανισμός: δύο άκρα, ένας βρόχος

Το SSL mode του CDN είχε οριστεί σε "Flexible": ο browser μιλά HTTPS στο CDN, αλλά το CDN μιλά απλό HTTP στο origin. Μια υπερασπίσιμη ρύθμιση από μόνη της. Πολλά origins σερβίρουν HTTP πίσω από ένα CDN που τερματίζει το TLS.

Το edge του origin, στο μεταξύ, ανακατηύθυνε εξαναγκαστικά κάθε αίτημα HTTP σε HTTPS, χωρίς να γνωρίζει τον proxy: εξέδιδε την ανακατεύθυνση χωρίς να ελέγξει το header που λέει ότι αυτό το αίτημα ήταν ήδη HTTPS στην μπροστινή πόρτα. Έτσι το CDN φέρνει σε HTTP, το origin απαντά «πήγαινε σε HTTPS», το επόμενο αίτημα του browser φτάνει στο CDN ως HTTPS, το CDN φέρνει το origin πάλι σε HTTP, και το origin ανακατευθύνει ξανά. Άπειρο, εκ κατασκευής. Το Flexible μόνο του είναι εντάξει. Η εξαναγκαστική ανακατεύθυνση μόνη της είναι εντάξει. Μόνο τα δύο μαζί κάνουν βρόχο.

ΔΥΟ ΔΙΑΜΟΡΦΩΣΕΙΣ, ΕΝΑΣ ΚΥΚΛΟΣ
Ο ΒΡΟΧΟΣ
browser HTTPS
CDN
origin σε απλό HTTP
301 προς HTTPS
πίσω στο CDN
origin σε απλό HTTP ξανά
Η ΔΙΟΡΘΩΣΗ
browser HTTPS
το CDN μιλά πραγματικό HTTPS στο origin
το origin βλέπει HTTPS
σελίδα
Ο βρόχος δεν έχει τελευταίο βήμα. Αυτό είναι όλο το bug.

Το bug που δεν κατέγραψε τίποτα

Αν το επίπεδο που απαντά την ανακατεύθυνση δεν καταγράφει τα συνηθισμένα αιτήματα, ο βρόχος δεν αφήνει τίποτα στο access log. Η σιωπή μοιάζει σαν να μην έφτασε καθόλου κίνηση, και η διερεύνηση πηγαίνει παντού εκτός από το σωστό σημείο. Ο κανόνας: όταν ένα bug δεν αφήνει logs, σταματήστε να κυνηγάτε τη σιωπή και αναπαράγετε τον μηχανισμό.

Αναπαράγετε τον μηχανισμό

ONE REQUEST REPRODUCES THE LOOP
$ curl -I -H 'X-Forwarded-Proto: https' http://origin.example/
HTTP/1.1 301 Moved Permanently
Location: https://origin.example/
# told the origin the request was already HTTPS. it redirects anyway.

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

Διορθώστε και τα δύο άκρα

ΤΟ ΑΚΡΟΗ ΔΙΟΡΘΩΣΗ
Η πλευρά του CDNΤο SSL mode μεταφέρθηκε σε "Full (Strict)": το CDN μιλά πραγματικό, επαληθευμένο HTTPS στο origin.
ΟΠΟΙΑΔΗΠΟΤΕ ΔΙΟΡΘΩΣΗ ΣΠΑΕΙ ΤΟΝ ΒΡΟΧΟ. ΚΑΙ ΟΙ ΔΥΟ ΤΟΝ ΚΑΝΟΥΝ ΑΔΥΝΑΤΟ.Η πλευρά του originΗ ανακατεύθυνση έγινε proxy-aware: ελέγχει το header του προωθούμενου πρωτοκόλλου και δεν αναπηδά ποτέ ένα αίτημα που ήταν ήδη HTTPS στην μπροστινή πόρτα.

Η διόρθωση του ενός άκρου μιας ασυμβατότητας δύο άκρων αφήνει μια «οπλισμένη» διαμόρφωση να περιμένει την επόμενη αλλαγή. Κλείστε και τα δύο άκρα και δεν απομένει κανένας συνδυασμός που κάνει κύκλο: παύση του CDN, αλλαγή CDN, αλλαγή του origin, και ο βρόχος δεν έχει πού να ξανασχηματιστεί.

“Κανένα από τα δύο άκρα δεν ήταν χαλασμένο. Τα δύο μαζί ήταν.”

Ευθείες απαντήσεις

Πώς διορθώνω το ERR_TOO_MANY_REDIRECTS πίσω από CDN;+

Ελέγξτε το ζεύγος, όχι μία ρύθμιση. Αν το CDN φέρνει το origin σας σε απλό HTTP (SSL mode τύπου "Flexible") και το origin σας εξαναγκάζει ανακατεύθυνση από HTTP σε HTTPS, κάνουν βρόχο. Μεταφέρετε το CDN σε πλήρες, αυστηρό HTTPS προς το origin, και κάντε την ανακατεύθυνση του origin proxy-aware.

Γιατί ο βρόχος ανακατευθύνσεων δεν δείχνει τίποτα στα access logs;+

Το επίπεδο που κάνει βρόχο μπορεί να μην καταγράφει τα συνηθισμένα αιτήματα, οπότε ο βρόχος είναι αόρατος. Μην κυνηγάτε τη σιωπή. Αναπαράγετε τον μηχανισμό με ένα αίτημα προς το origin και διαβάστε τι κάνει.

Τι κάνει το X-Forwarded-Proto;+

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

Είναι κακό το Flexible SSL mode;+

Είναι μια ανταλλαγή με κοφτερή άκρη: η κίνηση ανάμεσα σε CDN και origin είναι ακρυπτογράφητη, και σε συνδυασμό με εξαναγκαστική ανακατεύθυνση στο origin κάνει βρόχο. Το πλήρες, αυστηρό mode, με πραγματικό πιστοποιητικό στο origin, αφαιρεί και τα δύο προβλήματα.

Γιατί δούλεψε όταν το δοκίμασα εγώ;+

Μια δοκιμή που δεν περνά από το CDN ακολουθεί διαφορετική διαδρομή από τους επισκέπτες σας. Αναπαράγετε από την ακριβή διαδρομή που αποτυγχάνει, μαζί με τα headers. Σε αυτή τη διαφορά κρύβεται αυτή η κατηγορία bugs.

Παλεύετε με ένα bug που δεν καταγράφει τίποτα;

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

Μιλήστε με έναν μηχανικό

Φτάσατε στο τέλος.

Βάλτε την ανάγνωση σε εφαρμογή

Τι τρέχετε;

Πείτε μας για τον φόρτο εργασίας, την κίνηση και τις απαιτήσεις ανάκαμψης. Ξεκινήστε από το εργαλείο διαμόρφωσης server ή συζητήστε τις λεπτομέρειες με έναν μηχανικό.

Γραμμένο από τους μηχανικούς που χτίζουν και λειτουργούν την υποδομή που περιγράφει.
Μιλήστε με έναν μηχανικό
XIn

5 λεπτά ακόμη