Επιτάχυνση web browsing με χρήση squid caching proxy server

Από Κοινότητα Ελεύθερου Λογισμικού ΕΜΠ
Μετάβαση σε: πλοήγηση, αναζήτηση

Υπάρχει ένας σχετικά απλός και ανέξοδος τρόπος να επιταχύνουμε την περιήγησή μας στο web, με την χρήση ένός caching proxy server. Στο παρόν άρθρο θα δούμε συνοπτικά τί είναι το caching proxy server, πώς λειτουργεί και τον τρόπο που μπορούμε να το εγκαταστήσουμε και να το χρησιμοποιήσουμε.

Τί είναι το caching proxy

Καταρχάς, proxy server είναι μία υπηρεσία για την διαμοίραση της πρόσβασης Internet στους υπολογιστές ενός δικτύου. Σε ένα εσωτερικό δίκτυο ένας υπολογιστής (proxy server) συνδέεται στο Internet και παρέχει πρόσβαση στο web σε όλους τους υπόλοιπους υπολογιστές του δικτύου. Αυτό κατά βάση εξυπηρετεί τον σκοπό της κεντρικής διαχείρισης της πρόσβασης στο web. Συνεπώς μέσω του proxy server μπορούμε να επιτρέψουμε ή να απαγορεύσουμε την πρόσβαση στο web σε κάθε έναν υπολογιστή του δικτύου ξεχωριστά, κάτι ιδιαίτερα χρήσιμο σε εταιρικά περιβάλλοντα. Το σύστημα αυτό συνοπτικά λειτουργεί με τον ακόλουθο τρόπο:

Ο υπολογιστής (client) που θέλει να συνδεθεί με μία δικτυακή τοποθεσία προωθεί την διεύθυνσή της (URL) στον proxy server. Αυτός συνδέεται στην διεύθυνση που ζητήθηκε, παίρνει το περιεχόμενό της και το προωθεί στον client. Έτσι ο client, παρότι ο ίδιος δεν έχει άμεση πρόσβαση στο Internet μπορεί να βλέπει ιστοσελίδες μέσω του proxy server.

Όπως εύκολα παρατηρεί κανείς από την παραπάνω περιγραφή, ο proxy server κατά την μεταφορά του περιεχομένου της σελίδας στον client κρατάει το ίδιο το περιεχόμενο της σελίδας στα χέρια του. Μετά την παράδοση του περιεχομένου στον client διαγράφει το περιεχόμενο που προώθησε. Τί γίνεται όμως αν κάποιος άλλος client ζητήσει την ίδια σελίδα; Αντί να ξαναγίνει η όλη διαδικασία από την αρχή σαν να πρόκειται για μία διαφορετική διεύθυνση, ο proxy server μπορεί να προνοήσει και όταν προώθησε για πρώτη φορά την σελίδα, αντί να την σβήσει να κρατήσει ένα αντίγραφο στον δίσκο του. Έτσι, όταν ο δεύτερος client ζητήσει την ίδια διεύθυνση αντί ο proxy server να αντλήσει ξανά το περιεχόμενο της σελίδας που ζητήθηκε από το Internet, αναζητάει πρώτα την σελίδα στον δίσκο του που είναι σαφώς ταχύτερη διαδικασία. Αν το περιεχόμενο υπάρχει ήδη αποθηκευμένο τοπικά στον δίσκο του proxy server, τότε προωθείται αυτό το περιεχόμενο στον client και μάλιστα σε πάρα πολύ μικρότερο χρόνο από ότι θα απαιτούταν αν δεν είχε κρατηθεί αντίγραφο. Αυτή η διαδικασία λέγεται caching και ο proxy servers που διαθπέτουν αυτή την λειτουργία ονομάζονται caching proxy servers.

Πόσο αποτελεσματικό είναι το caching proxy

Καταρχάς να ξεκαθαρίσουμε ότι μία ιστοσελίδα δεν αποτελείται από ένα μόνο αρχείο, αλλά από πολλά επιμέρους. Κάθε εικόνα, κάθε διαφημιστικό banner, καθώς και το κείμενο που αποτελούν μία ιστοσελίδα είναι διαφορετικά αρχεία. Όταν λοιπόν λέμε ότι ο proxy server "κατεβάζει" μία σελίδα, στην πραγματικότητα κατεβάζει αρκετά μικρά αρχειάκια που συνθέτουν την ιστοσελίδα. Αν για παράδειγμα δούμε την αρχική σελίδα του FOSS NTUA Community και την συγκρίνουμε με τις υπόλοιπες σελίδες του θα δούμε ότι υπάρχουν πολλά κοινά στοιχεία, όπως το μενού, τα εικονίδια το background, κλπ. Όταν λοιπόν ο proxy server ζητάει μία νέα σελίδα, τότε ένα κομμάτι του περιεχομένου της νέας σελίδας το έχει ήδη αποθηκευμένο στον δίσκο του και συνεπώς δεν χρειάζεται να το ξανακατεβάσει από το Internet. Το ίδιο συμβαίνει για παράδειγμα και στο site του flash.gr όπου ναι μεν τα άρθρα κάθε μέρα αλλάζουν, αλλά το λογότυπο του site, τα banners και άλλα στοιχεία παραμένουν τα ίδια για πολλές μέρες ή και μήνες. Έτσι, ακόμα και όταν δεν ζητάμε την ίδια ακριβώς διεύθυνση, αλλά κάποια διαφορετική σελίδα ενός site, πάλι έχουμε επιτάχυνση.

Την τακτική του caching την ακολουθούν και οι web browsers, όπως ο Firefox, ο Opera και ο Internet Explorer. Ένας caching proxy server όμως, λόγω του ότι η κύρια λειτουργία του είναι ακριβώς αυτή η επιτάχυνση της περιήγησης, έχει πολύ καλύτερο σύστημα διαχείρισης των αποθηκευμένων ιστοσελίδων με αποτέλεσμα να μπορεί να αποθηκεύσει αποδοτικά περισσότερες ιστοσελίδες και να μας τις παρουσιάσει πολύ πιο γρήγορα από ότι το ενσωματωμένο caching που διαθέτει ο browser μας. Μάλιστα, οι proxy servers έχουν ανεπτυγμένες τεχνικές πρόβλεψης ζήτησης μίας σελίδας με αποτέλεσμα οι πιο συχνά χρησιμοποιούμενη πληροφορία να υπάρχει στην μνήμη του proxy server εκτός από τον δίσκο του, με αποτέλεσμα να έχουμε ακόμα γρηγορότερες αποκρίσεις. Επιπλέον, όταν ο χώρος που είναι διαθέσιμος για αποθήκευση γεμίσει και πρέπει να διαγραφούν από τον δίσκο κάποια αρχεία ώστε να δημιουργηθεί χώρος για νέα δεδομένα τότε οι proxy servers ακολουθούν ανεπτυγμένες πολιτικές (flash policies) για την διαγραφή της λιγότερο πιθανής για ζήτηση πληροφορίας.

Τελικά, η χρήση ενός caching proxy server, παρόλο που προορίζεται κυρίως για εταιρικά περιβάλλοντα με πολλούς υπολογιστές που χρειάζονται πρόσβαση στο web, μπορούν να επιταχύνουν σημαντικά την περιήγησή μας στο Internet ακόμα και όταν πρόκειται για τον ένα και μοναδικό υπολογιστή του σπιτιού μας.

Squid caching proxy server

Ο δημοφιλέστερος και από τους πιο πλήρεις σε λειτουργίες caching proxy server που κυκλοφορούν είναι ο squid. Είναι μάλιστα ελεύθερο και ανοιχτού κώδικα λογισμικό σχεδιασμένο να τρέχει σε συστήματα unix και φυσικά... linux. Οι λειτουργίες του δεν περιορίζονται μόνο στον περιορισμό πρόσβασης και το caching, αλλά έχει πολλές περισσότερες δυνατότητες τις οποίες μπορεί κανείς να δει στο site του προγράμματος.

Το επίσημο site του squid είναι το : http://www.squid-cache.org/ όπου εκτός από την τελευταία έκδοση μπορεί κανείς να βρει νέα, οδηγίες χρήσης και εγκατάστασης, να υποβάλει bugs και πολλά άλλα.

Εγκατάσταση του squid proxy server

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

Καταρχάς, ο squid μπορεί να εγκατασταθεί τόσο σε Windows όσο και συστήματα unix, συμπεριλαμβάνομένου φυσικά του linux. Στην περίπτωση του linux, ο καλύτερος τρόπος εγκατάστασης είναι αυτός που μας παρέχει η διανομή που έχουμε εγκατεστημένη στο σύστημά μας. Δηλαδή για Debian και Debian based διανομές (πχ Ubuntu) χρησιμοποιούμε το apt-get (ή το synaptic), για RedHat, Fedora Core και SUSE το rpm, κλπ. Η εγκατάσταση που θα κάνουμε θα βάλει τα απαραίτητα αρχεία στο σύστημά μας και θα δημιουργήσει ένα configuration file που θα έχει είτε τις default ρυθμίσεις του squid όπως παρέχεται από το επίσημο site, είτε τις ενδεδειγμένες κατά την άποψη του διανομέα που κατασκεύασε το πακέτο που εγκαταστήσαμε. Για να το φέρουμε λοιπόν στις δικές μας ανάγκες, πρέπει να τροποποιήσουμε το configuration file του squid.

Σημειώνουμε ότι για να ενεργοποιηθούν οι αλλαγές που πραγματοποιήσαμε, πρέπει να επανεκινήσουμε το squid.

Το configuration file του squid συνήθως βρίσκεται στο /etc/squid/squid.conf αλλά σε μερικές διανομές μπορεί να βρίσκεται αλλού. (Ένας τρόπος να το εντοπίσουμε είναι να γράψουμε find /etc/ | grep squid.conf ). Ανοίγουμε το configuration file με έναν editor (πχ vi) ως root για να μπορέσουμε να αποθηκεύσουμε τις αλλαγές. Αναζητούμε τις παρακάτω ρυθμίσεις και κάνουμε τις αντίστοιχες τροποποιήσεις.

# OPTIONS WHICH AFFECT THE CACHE SIZE

cache_mem : Πρόκειται για το μέγεθος της RAM που θα χρησιμοποιείται για αποθήκευση των πιο συχνά χρησιμοποιούμενων πληροφοριών. Το default είναι 8 MB, αλλά κρίνονται λίγα. Ανάλογα με την μνήμη RAM που διαθέτει το μηχάνημά μας μπορύμε να το ανεβάσουμε ή και να το μειώσουμε. Σε ένα μηχάνημα με τουλάχιστον 256 MB RAM, μπορούμε να το θέσουμε στα 24 ή και 32 MB. Πχ:

cache_mem 32 MB

maximum_object_size : Το μέγιστο μέγεθος αρχείου που θα αποθηκεύεται στην cache του squid. Αν πχ κάνουμε download ένα τερράστιο αρχείο από τον browser μας (πχ το OpenOffice που είναι ~120 MB) τότε αυτό είναι λίγο απίθανο να το χρειαστούμε από την cache, καθώς τέτοια downloads γίνονται μόνο μία φορά το καθένα. Οπότε μην βιαστείτε να το βάλετε σε πολύ υψηλά νούμερα. Το default είναι 4096 KB το οποίο είναι καλό μέγεθος, αλλά αν θέλετε να το μεγαλώσετε για να συμπεριλάβετε περισσότερα αρχεία, μην το βάλετε μεγαλύτερο από 8192 KB (δηλ. 8 MB). Επομένως η γραμμή θα γίνει πχ:

maximum_object_size 4096 KB

cache_dir : Ο χώρος του δίσκου που θα καταλαμβάνει η cache του squid, η τοποθεσία των directory και άλλες πληροφορίες. Η σύνταξη γίνεται ως εξής:

cache_dir diskd Directory-Name Mbytes L1 L2

ενώ οι default ρυθμίσεις είναι οι εξής:

cache_dir ufs /var/spool/squid 100 16 256


Το diskd είναι πάντα ufs. Το Directory-Name είναι το directory όπου θέλουμε να αποθηκεύεται η cache. Δεν έχουμε συνήθως λόγο να πειράξουμε το default της εγκατάστασης του συστήματός μας, το οποίο μπορεί και να διαφέρει από αυτό που γράφουμε εδώ. Το Mbytes είναι ο χώρος του δίσκου σε MB που θα διατεθεί για την cache του squid. Το default που είναι 100 MB κρίνεται λίγο. Ανάλογα με τον διαθέσιμο χώρο του δίσκου σας μπορείτε να το ανεβάσετε αρκετά πιο πάνω. Πχ για 2 GB μπορείτε να θέσετε την τιμή 2048. Τα επόμενα δύο νούμερα, L1 και L2, έχει να κάνει με την δενδρική δομή των directories του squid και σπάνια θα χρειαστεί να τα αλλάξετε. Αν πάντως θελήσετε να τα αλλάξετε, καλύτερα να ψάξετε λίγο στο web για τις βέλτιστες τιμές οι οποίες εξαρτώνται από τις υπόλοιπες παραμέτρους όπως το μέγεθος της cache, το maximum_object_size, κλπ. Λάθος τιμές στα L1 και L2 μπορούν να έχουν σημαντικές επιπτώσεις την επίδοση του caching.

# ACCESS CONTROLS

Σε αυτό το σημείο να σημειώσουμε ότι ο squid μπορεί να εγκατασταθεί είτε στο μηχανημά μας είτε σε κάποιο άλλο μηχάνημα του δικτύου μας. Αν διαθέτουμε μονάχα έναν υπολογιστή τότε η πρώτη λύση είναι η μοναδική που έχουμε και η παράγραφος "ACCESS CONTROLS" δεν χρειάζεται να μας απασχολήσει. Αν όμως θέλουμε να τρέχουμε τον squid σε διαφορετικό μηχάνημα από αυτό που κάνουμε browsing, τότε πρέπει να ενημερώσουμε τον squid για το σε ποιούς άλλους υπολογιστές του δικτύου μας θέλουμε να δώσουμε δικαίωμα στην χρήση του proxy server.


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

# And finally deny all other access to this proxy

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

http_access allow localhost
acl our_network src 10.0.0.0/24
http_access allow our_network

Αυτό προϋποθέτει ότι το δίκτυό μας έχει διευθύνσεις του τύπου 10.0.0.x . Αν είχε πχ του τύπου 192.168.0.x τότε τροποποιούμε αντίστοιχα την δεύτερη γραμμή. Δηλαδή:

acl our_network src 192.168.0.0/24

Σώζουμε το αρχείο και επανεκινούμε τον squid (πχ /etc/init.d/squid restart ).

Αυτά με τις βασικότερες ρυθμίσεις του squid. Υπάρχουν φυσικά πάρα πολλές άλλες επιλογές στο configuration file του squid και μάλιστα έχουν όλες αναλυτικές οδηγίες και πληροφορίες για το τί επηρεάζουν και πώς μέσα στο ίδιο το configuration file. Στο παρόν άρθρο δεν θα ασχοληθούμε άλλο με τις ρυθμίσεις. Περισσότερες πληροφορίες για αυτές μπορείτε να βρείτε στο site του squid.

Ρύθμιση του browser

Με τα παραπάνω, ο squid είναι έτοιμος να δεχτεί σύνδεση από τον browser μας και να επιταχύνει την περιήγησή μας στο web. Πρέπει όμως να ρυθμίσουμε και τον browser μας ώστε να χρησιμοποιεί τον web proxy που εγκαταστήσαμε. Στην περίπτωση του Firefox κάνουμε:

Edit -> Preferences -> General -> Connection Settings -> Manual proxy configuration

και στα πεδία HTTP Proxy, SSL Proxy και FTP Proxy βάζουμε την IP διεύθυνση του υπολογιστή που τρέχει τον squid. Αν πρόκειται για το ίδιο μηχάνημα βάζουμε το 127.0.0.1, ενώ αν πρόκεται για διαφορετικά μηχανήματα βάζουμε την αντίστοιχη διεύθυνση (πχ 10.0.0.1). Αν δεν είναι ενεργές όλες οι επιλογές τότε ξετικάρουμε την επιλογη "Use this proxy server for all protocols". Στο πεδίο port των τριών παραπάνω επιλογών (HTTP, SSL και FTP) βάζουμε το 3128 που είναι η default port του squid. Τα υπόλοιπα τα αφήνουμε κενά ή όπως έχουν.

Τέλος, μπορούμε να μειώσουμε το μέγεθος της cache του Firefox, καθώς πλέον με την εγκατάσταση του squid ο ρόλος της είναι δευτερεύον:

Edit -> Preferences -> Privacy -> Cache

και στο πεδίο "Use up to: " θέτουμε το πολύ 50 MB ή και λιγότερο. Kαλό είναι όμως να μην το μηδενίσουμε τελείως.

Στον Internet Explorer, τον Opera και τους άλλους browsers η ρύθμιση γίνεται με αντίστοιχο τρόπο συμπληρώνοντας τα πεδία με τις παραπάνω τιμές.

Βλέποντας τα αποτελέσματα

Την πρώτη φορά που θα ζητήσουμε μία σελίδα από τον browser μας δεν θα υπάρχει καμία επιτάχυνση. Απεναντίας μπορεί να παρατηρήσουμε μαγαλύτερη καθυστέρηση από πριν. Αυτό οφείλεται στο ότι ο squid δεν έχει ακόμα καμία πληροφορία από αυτή την σελίδα και γιαυτό πρέπει να την "κατεβάσει" ολόκληρη στον δίσκο του. Αυτό ισχύει για κάθε site που επισκέπτεστε για πρώτη φορά ή που ξαναεπισκέπτεστε ύστερα από πολύ μεγάλο χρονικό διάστημα και ο squid έκρινε ότι δεν αξίζει να την κρατάει άλλο στον δίσκο.Όσο όμως θα ζητάτε σελίδες από το ίδιο site που θα έχουν κοινά αρχεία μεταξύ τους (εκόνες, flash banners, μενού, κλπ) τόσο θα παρατηρείτε την διαφορά στην ταχύτητα. Η διαφορά στην ταχύτητα μπορεί να ποικίλει από σημαντικά μεγαλύτερη έως αδιάφορη, ανάλογα με την ταχύτητα της σύνδεσης, την ταχύτητα του υπόλογιστή και το site που επισκέπτεστε κάθε φορά. Επομένως, για να κρίνετε την διαφορά θα πρέπει πρώτα να χρησιμοποιήσετε τον squid για ένα εύλογο χρονικό διάστημα.

Αν θέλετε για κάποιο λόγο να επαναφέρετε το browser σε λειτουργία μη χρήσης του proxy server, πηγαίνετε:

Edit -> Preferences -> General -> Connection Settings -> Direct connection to the Internet