Βασικά σημεία
HTTP/2 και SSL
FAQ
Μέρος 1: Apache (διακομιστής Ιστού)
Μέρος 2: CURL
Το HTTP/2 είναι η νεότερη έκδοση του πρωτοκόλλου HTTP, που βασίζεται στο SPDY. Η ανάπτυξή του ξεκίνησε από την Google και το HTTP/2 βασίζεται σε μεγάλο βαθμό στη βάση κώδικα και τις έννοιες του SPDY.
Το SPDY έχει πλέον καταργηθεί και η παγκόσμια υιοθέτηση του HTTP/2 βρίσκεται σε εξέλιξη. Πολλές εταιρείες φιλοξενίας έχουν ήδη παράσχει υποστήριξη για το HTTP/2 λόγω της πρόσθετης ταχύτητάς του.
Κατά τη στιγμή της γραφής, το DirectAdmin δεν παρέχει έναν τρόπο ενεργοποίησης του HTTP/2 με ένα κλικ. Ωστόσο, υπάρχουν πολλοί τρόποι για να επιτευχθεί υποστήριξη HTTP/2. Η μέθοδος που περιγράφεται παρακάτω έχει αποδειχθεί ότι είναι η πιο ισχυρή και σταθερή προσέγγιση.
Πολλά στοιχεία πρέπει να ενημερωθούν για να τεθεί σε ισχύ το HTTP/2. Εξαιτίας αυτού, σας συμβουλεύω ανεπιφύλακτα να τραβήξετε ένα στιγμιότυπο. Εάν είναι δυνατόν, ακολουθήστε αυτόν τον οδηγό σε έναν εντελώς νέο διακομιστή.
Αυτός ο οδηγός αποτελείται από δύο μέρη: ενεργοποίηση υποστήριξης HTTP/2 στον διακομιστή ιστού (Apache) για πελάτες (επισκέπτες) και ενεργοποίηση του HTTP/2 σε cURL. Η ενεργοποίηση του HTTP v2 για cURL αναγκάζει τα αιτήματα cURL που προέρχονται από τον διακομιστή σας να κάνουν χρήση του HTTP/2 για τους διακομιστές προορισμού του, αν είναι δυνατόν.
Βασικά σημεία
- Δεν απαιτείται ενημέρωση τόσο του Apache όσο και του cURL για τη χρήση του HTTP/2. Είναι εντάξει αν ακολουθήσετε έναν από τους δύο οδηγούς, καθώς λειτουργούν χωριστά ο ένας από τον άλλο.
- Υπήρξαν μερικές περίεργες περιπτώσεις στις οποίες το Apache και το HTTP/2 φαίνεται να λειτουργούν καλά, αλλά η φόρτωση είναι επιτυχής σε «τυχαία» προγράμματα περιήγησης και οι ιστότοποι γίνονται απρόσιτοι (timeout) σε άλλους. Η απλή επαναφορά στην αρχική διαμόρφωση του Apache θα διορθώσει αυτό το πρόβλημα, καθώς ο Apache δεν θα γνωρίζει για το HTTP/2 και δεν θα επιχειρήσει να προβάλει περιεχόμενο μέσω αυτού.
- Πάντα να δημιουργείτε αντίγραφο ασφαλείας ή να δημιουργείτε ένα στιγμιότυπο εκ των προτέρων. Η ενεργοποίηση του HTTP/2 μπορεί να είναι μια σχετικά εύθραυστη διαδικασία, επομένως είναι σημαντικό να μπορείτε να επαναφέρετε τις αλλαγές εάν χρειάζεται.
- Η εκ νέου μεταγλώττιση του λογισμικού μπορεί πάντα να προκαλεί μικρό χρόνο διακοπής λειτουργίας. Σε ορισμένες περιπτώσεις, αυτό είναι λιγότερο από ένα λεπτό, αλλά δεν υπάρχει τρόπος να το πούμε ακριβώς. Θα πρέπει να είστε προετοιμασμένοι για κάποιο χρόνο διακοπής τουλάχιστον.
- Χρειάζεστε πρόσβαση root στον διακομιστή για αυτόν τον οδηγό. Εάν δεν έχετε τη δυνατότητα να αυξήσετε το επίπεδο των δικαιωμάτων σας σε root, θα πρέπει να επικοινωνήσετε με τον διαχειριστή του διακομιστή για να ενεργοποιήσετε το HTTP/2 στον διακομιστή.
HTTP/2 και SSL
Αν και δεν αποτελεί τεχνική απαίτηση από το ίδιο το HTTP/2, στις περισσότερες περιπτώσεις θα χρειαστείτε πιστοποιητικό SSL για να χρησιμοποιήσετε το HTTP/2. Όπως αναφέρθηκε, το HTTP/2 δεν απαιτεί τεχνικά κάτι τέτοιο, αλλά πολλά προγράμματα περιήγησης (Safari, Chrome, Firefox κ.λπ.) έχουν δημιουργήσει αυτό το πρότυπο. Το περιεχόμενο δεν θα προβάλλεται μέσω HTTP/2 όταν μια σελίδα φορτώνεται χωρίς SSL χρησιμοποιώντας αυτά τα προγράμματα περιήγησης. Λαμβάνοντας υπόψη ότι οι περισσότεροι χρήστες χρησιμοποιούν αυτά τα προγράμματα περιήγησης (και άλλα) που συμμετέχουν επίσης σε αυτό το πρότυπο, θα πρέπει να χρησιμοποιήσετε ένα πιστοποιητικό SSL.
Αν ψάχνετε για ένα δωρεάν πιστοποιητικό SSL, θα πρέπει να ρίξετε μια ματιά σε έναν από τους οδηγούς Let's Encrypt:
Συνιστάται: Εγκατάσταση του Let's Encrypt στο DirectAdmin
Εναλλακτικοί πίνακες ελέγχου:
Γενικοί οδηγοί:
FAQ
Αυτός ο οδηγός τεκμηριώνει την εγκατάσταση του Brotli;
Όχι, δεν περιγράφεται μέθοδος για την εγκατάσταση του Brotli παράλληλα με το HTTP/2 σε αυτό το άρθρο.
Η μεταγλώττιση αποτυγχάνει χωρίς λόγο και έχω ακολουθήσει τα ακριβή βήματα που περιγράφονται σε αυτό το άρθρο. Πώς μπορώ να το λύσω αυτό;
Παρόλο που υπάρχουν πολλοί πιθανοί λόγοι για αυτό, λαμβάνοντας υπόψη διαφορετικά περιβάλλοντα και παρόμοια, πιθανώς οι ρυθμίσεις τοπικής ρύθμισης να μην είναι σωστές. Δοκιμάστε να βάλετε LC_ALL=Cμπροστά από τις εντολές σας, ώστε η εντολή για την εκ νέου μεταγλώττιση του Apache να μοιάζει με αυτό, για παράδειγμα: LC_ALL=C ./build apache
Μην ξεχνάτε το διάστημα μεταξύ LC_ALL=Cκαι της εντολής!
Θα χάσω κάποια δεδομένα;
Σε περίπτωση που χρησιμοποιείτε αυτήν τη στιγμή μια ρύθμιση αντίστροφου διακομιστή μεσολάβησης, για παράδειγμα με Apache και Nginx, θα πρέπει να τον επαναφέρετε στο Apache, οπότε θα χάσετε όντως τα αρχεία διαμόρφωσης Nginx. Σε περίπτωση που έχετε κάνει προσαρμοσμένες διαμορφώσεις VirtualHost (είτε μέσω της γραμμής εντολών είτε μέσω του ίδιου του DirectAdmin), θα πρέπει να τις τροποποιήσετε ανά τομέα, ώστε οι εκδόσεις του Apache να παραμείνουν ενεργές. Δεν θα χάσετε δεδομένα σχετικά με δεδομένα χρήστη, περιεχόμενο ιστότοπου, βάσεις δεδομένων κ.λπ.
Αυτές οι προσαρμοσμένες εκδόσεις θα με εμποδίσουν να ενημερώσω πακέτα και λογισμικό στο μέλλον;
Γενικά, δεν υπάρχει λόγος ανησυχίας για αυτό. Λαμβάνοντας υπόψη τη σπονδυλωτή ρύθμιση του DirectAdmin (και συνεπώς και του CustomBuild), θα πρέπει να μπορείτε να κάνετε υποβάθμιση ή αναβάθμιση σε άλλες εκδόσεις λογισμικού στο μέλλον χωρίς κανένα πρόβλημα. Αν και θα πρέπει να τεκμηριώσετε τις αλλαγές σε περίπτωση που απαιτείται εναλλακτική διαδρομή αναβάθμισης στο μέλλον, δεν θα πρέπει να ανησυχείτε για τις εκδόσεις ασυμβατότητας με νέες εκδόσεις λογισμικού.
Το DirectAdmin δεν προσφέρει εξαρχής το HTTP/2. σίγουρα αυτό σημαίνει ότι δεν είναι συμβατό ή έχουν τους λόγους τους να μην είναι. Γιατί απαιτείται αυτή η λύση;
Οι μέθοδοι εγκατάστασης και ενεργοποίησης του HTTP/2 που περιγράφονται παρακάτω δεν είναι τόσο πολλές λύσεις, αλλά απλώς ενημερώσεις πακέτων και αλλαγές διαμόρφωσης. Λόγω της αρθρωτής εγκατάστασης του DirectAdmin, αυτές οι αλλαγές είναι απολύτως εντάξει και δεν πρέπει να προκαλούν προβλήματα ή άλλα προβλήματα. Είναι δύσκολο να προσδιοριστεί γιατί το DirectAdmin δεν το υποστηρίζει εκ των υστέρων, δεδομένου ότι οι συγγραφείς δεν έχουν δώσει μια εξήγηση για αυτό. Ωστόσο, ένα αρκετά σταθερό συμπέρασμα είναι ότι το DirectAdmin χρησιμοποιεί τα πακέτα εκδόσεων από το λειτουργικό σύστημα. Αυτά γενικά δεν είναι τόσο ενημερωμένα όσο τα παρακάτω πακέτα. Δεν υπάρχει τίποτα κακό με το HTTP/2, την ίδια την τεχνολογία και τη συμβατότητά του. Όπως και πολλές άλλες τεχνολογίες, μπορεί να χρειαστεί λίγος χρόνος για να προσαρμοστεί εγγενώς.
Ποιοι είναι οι πιθανοί κίνδυνοι από την ενεργοποίηση του HTTP/2 με το Apache;
Στην ενεργοποίηση του HTTP/2 (που αποτελείται από διαδικασία αναβάθμισης και διαμόρφωσης) υπάρχουν πολλές μεταβλητές που μπορεί να αποδειχθούν μη τυπικές. Ωστόσο, ο μεγαλύτερος κίνδυνος βρίσκεται στο ανθρώπινο λάθος. Τραβήξτε ένα στιγμιότυπο εκ των προτέρων, φροντίστε να ανακοινώσετε τη συντήρηση στους χρήστες σας (αν υπάρχουν στον διακομιστή εκτός από εσάς) και να είστε προσεκτικοί. Επιπλέον, μην αντιγράψετε και επικολλήσετε τις εντολές χωρίς να σκεφτείτε πρώτα τι κάνουν.
Συνιστώ ανεπιφύλακτα την προσωρινή περιστροφή μιας ξεχωριστής παρουσίας νέφους Vultr με το DirectAdmin και να ακολουθήσετε τα βήματα. Εάν κάτι πάει στραβά σε μια «φρέσκια» εγκατάσταση, θα ξέρετε πού και πώς να το διορθώσετε, ώστε να μην χρειάζεται να το κάνετε σε περιβάλλον παραγωγής.
Μέρος 1: Apache (διακομιστής Ιστού)
Εάν αυτήν τη στιγμή χρησιμοποιείτε έναν αντίστροφο διακομιστή μεσολάβησης, θα πρέπει να επιστρέψετε σε ένα περιβάλλον μόνο για Apache. Αυτό συμβαίνει επειδή το HTTP/2 είναι πολύ δύσκολο να εντοπιστεί σφάλματα εάν κάτι πάει στραβά. Με το να μπορείτε να χρησιμοποιήσετε την ενσωματωμένη λειτουργικότητα HTTP/2 του Apache, μπορείτε ουσιαστικά να εξαλείψετε ένα πολύ μεγάλο μέρος των προβλημάτων.
Βήμα 1: Αναβάθμιση OpenSSL
Σε πολλές περιπτώσεις, η έκδοση OpenSSL δεν είναι συμβατή με το ALPN, το οποίο απαιτείται για το HTTP/2. Επομένως, ας ενεργοποιήσουμε το ALPN ενημερώνοντας το OpenSSL.
Αρχικά, ας βεβαιωθούμε ότι η έκδοση OpenSSL δεν είναι συμβατή εκτελώντας:
openssl version
Εάν η έκδοση OpenSSL είναι μικρότερη από 1.1.0f, εκτελέστε τα παρακάτω ως root. Διαφορετικά, μεταβείτε στο βήμα 2.
cd ~
wget ftp://ftp.openssl.org/source/openssl-1.1.0f.tar.gz
tar xzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config --prefix=/usr/local/lib_http2 no-ssl2 no-ssl3 zlib-dynamic -fPIC
make depend
make install
Βήμα 2: Εγκατάσταση του nghttp2
Για να λειτουργήσει το HTTP/2, πρέπει να εγκαταστήσουμε το nghttp2. Το Nghttp2 είναι μια υλοποίηση του HTTP/2 (και του HPACK) σε C. Το Nghttp2 είναι μια συνδυασμένη έκδοση του προγράμματος-πελάτη, διακομιστή και διακομιστή μεσολάβησης HTTP/2 στο C.
Για να εγκαταστήσετε το nghttp2, εκτελέστε τις παρακάτω εντολές. Ευτυχώς, το nghttp2 μπορεί να κατασκευαστεί απευθείας από το CustomBuild.
cd /usr/local/directadmin/custombuild
./build update
./build nghttp2
Βήμα 3: Ενεργοποίηση HTTP/2 στον Apache
Πρέπει να αλλάξουμε μερικές τιμές στο αρχείο ρυθμίσεων του Apache για να κάνει χρήση του HTTP/2. Όταν ο διακομιστής ιστού δεν λαμβάνει οδηγίες για τη χρήση μιας εναλλακτικής έκδοσης HTTP, δεν θα τη χρησιμοποιήσει. Επομένως, πρέπει να προσθέσουμε το HTTP/2 στο αρχείο διαμόρφωσης.
Για να τεθούν σε ισχύ αυτές οι αλλαγές, είναι απαραίτητη μια αναδόμηση του Apache μέσω του CustomBuild. Καθώς οι παράμετροι και οι τιμές που χρησιμοποιούνται από το CustomBuild κατά την κατασκευή λογισμικού καθορίζονται σε ένα αποκλειστικό αρχείο διαμόρφωσης, η καλύτερη πρακτική είναι να τοποθετήσετε αυτές τις αλλαγές σε ένα αποκλειστικό προσαρμοσμένο αρχείο διαμόρφωσης.
Σημείωση: αν δεν βάλετε αυτές τις αλλαγές σε ένα προσαρμοσμένο αρχείο, πιθανότατα θα αντικατασταθούν και η ρύθμιση σας θα χαλάσει. Ακολουθήστε τις οδηγίες που περιγράφονται παρακάτω.
Εκτελέστε τις παρακάτω εντολές για να δημιουργήσετε το αρχείο και να το συμπληρώσετε εκ των προτέρων με τις προεπιλεγμένες τιμές, ώστε να μπορούμε να το αλλάξουμε στη συνέχεια:
mkdir -p /usr/local/directadmin/custombuild/custom/ap2
cp -p /usr/local/directadmin/custombuild/configure/ap2/configure.apache /usr/local/directadmin/custombuild/custom/ap2/configure.apache
Από τώρα, έχουμε ένα προσαρμοσμένο αρχείο το οποίο είναι πανομοιότυπο με το προεπιλεγμένο αρχείο διαμόρφωσης για το Apache που χρησιμοποιείται από το CustomBuild. Πρέπει να αλλάξουμε το /usr/local/directadmin/custombuild/custom/ap2/configure.apacheαρχείο αντικαθιστώντας την ακόλουθη συμβολοσειρά:
"--with-ssl=/usr" \
με:
"--enable-http2" \
"--enable-ssl-staticlib-deps" \
"--with-ssl=/usr/local/lib_http2" \
Σημείωση: Βεβαιωθείτε ότι δεν υπάρχει κενό διάστημα μετά από οποιαδήποτε από τις ανάστροφες κάθετες . Ο υπερβολικός κενός χώρος εκεί θα προκαλέσει σπάσιμο της κατασκευής.
Στη συνέχεια, ξαναχτίστε το Apache. Το CustomBuild θα χρησιμοποιήσει το προσαρμοσμένο αρχείο ρυθμίσεων που μόλις δημιουργήσατε:
./build apache
Βήμα 4: Αλλαγή της διαμόρφωσης του Apache
Το Apache έχει πλέον ανακατασκευαστεί, συμπεριλαμβανομένων των απαραίτητων λειτουργικών μονάδων και ρυθμίσεων για το HTTP/2. Αυτό σημαίνει ότι τώρα έχουμε εγκαταστήσει μια έκδοση Apache στον διακομιστή μας με υποστήριξη για HTTP/2, αλλά πρέπει να πούμε στον Apache να το χρησιμοποιήσει πραγματικά πρώτα.
Προσθέστε τις ακόλουθες γραμμές στο /etc/httpd/conf/extra/httpd-includes.conf:
ProtocolsHonorOrder On
Protocols h2 h2c http/1.1
Αποθηκεύστε αυτές τις αλλαγές και ξαναγράψτε τα αρχεία διαμόρφωσης, ώστε να είναι μόνιμα σε όλες τις ανακατασκευές:
cd /usr/local/directadmin/custombuild
./build rewrite_confs
Το HTTP/2 θα πρέπει τώρα να είναι ενεργό στον διακομιστή ιστού (Apache).
Βήμα 5: Επανεκκινήστε τον διακομιστή
Κάντε επανεκκίνηση του διακομιστή για να βεβαιωθείτε ότι οι αλλαγές μας επιμένουν κατά τις επανεκκινήσεις. Κάντε επανεκκίνηση του διακομιστή μέσω του πίνακα ελέγχου Vultr ή εκτελώντας την rebootεντολή.
Βήμα 6: Δοκιμάστε το HTTP/2
Η λειτουργικότητα του HTTP/2 μπορεί εύκολα να ελεγχθεί χρησιμοποιώντας το ακόλουθο εργαλείο: Δοκιμή HTTP/2
Λαμβάνοντας υπόψη ότι το HTTP/2 είναι συγκεκριμένο για διακομιστή και δεν μπορεί να περιοριστεί σε ένα συγκεκριμένο ζεύγος τομέων ή ιστότοπων, η εισαγωγή οποιουδήποτε ονόματος τομέα που δείχνει προς τον διακομιστή ή ακόμα και τη διεύθυνση IP του διακομιστή θα πρέπει να λειτουργεί.
Η δοκιμή θα σας πει εάν είναι σε θέση να φτάσει στον διακομιστή ιστού μέσω HTTP/2. Σε περίπτωση που το εργαλείο λέει ότι το HTTP/2 είναι ενεργοποιημένο στον διακομιστή σας, οι ιστότοποι του DirectAdmin μπορούν πλέον να προσεγγιστούν μέσω HTTP/1.1 ή HTTP/2. Σε περίπτωση που η υποστήριξη HTTP/2 δεν είναι διαθέσιμη για τον πελάτη (επισκέπτη), το πρόγραμμα περιήγησής του θα επιστρέψει στο HTTP/1.1.
Σε περίπτωση που το εργαλείο δεν μπορεί να φτάσει στον διακομιστή ιστού σας μέσω HTTP/2, ακολουθήστε ξανά τα παραπάνω βήματα. Γενικά (καθώς τα παραπάνω βήματα δεν αντικαθιστούν ενεργά τίποτα) αυτό δεν θα βλάψει ή θα σπάσει τη ρύθμισή σας.
Μέρος 2: CURL
Συνιστώ την ενημέρωση του cURL ώστε να μπορεί να προσεγγίσει διακομιστές με υποστήριξη HTTP/2. Σε περίπτωση που ένας διακομιστής δεν υποστηρίζει HTTP/2, θα επιστρέψει στο HTTP/1.1.
Βήμα 1: Προσθήκη του προσαρμοσμένου αρχείου διαμόρφωσης
Ακριβώς όπως με τον Apache, θα δημιουργήσουμε ένα προσαρμοσμένο αρχείο διαμόρφωσης, έτσι ώστε το cURL που έχει δημιουργηθεί από την CustomBuild να χρησιμοποιεί τις προσαρμοσμένες ρυθμίσεις μας.
Δημιουργήστε τον κατάλογο:
mkdir -p /usr/local/directadmin/custombuild/custom/curl
Δημιουργήστε το αρχείο:
touch /usr/local/directadmin/custombuild/custom/curl/configure.curl
Αντιγράψτε και επικολλήστε τα ακόλουθα περιεχόμενα στο αρχείο:
#!/bin/sh
perl -pi -e 's|CURL_CHECK_PKGCONFIG\(zlib\)|#CURL_CHECK_PKGCONFIG(zlib)|g' configure.ac
LIBS="-ldl" ./configure --with-nghttp2=/usr/local --with-ssl=/usr/local/lib_http2
Όπως μπορείτε να δείτε, αυτά τα περιεχόμενα λένε στο cURL να μεταγλωττιστεί χρησιμοποιώντας τη lib_http2βιβλιοθήκη SSL.
Αποθηκεύστε το αρχείο και δώστε του τα σωστά δικαιώματα:
chmod 700 /usr/local/directadmin/custombuild/custom/curl/configure.curl
Βήμα 2: Δημιουργία cURL
Στη συνέχεια, το μόνο που χρειάζεται να κάνουμε είναι να δημιουργήσουμε το cURL.
cd /usr/local/directadmin/custombuild
./build curl
Το cURL έχει πλέον μεταγλωττιστεί με υποστήριξη HTTP 2.