La per­for­man­ce rientra ormai da tempo tra le proprietà più im­por­tan­ti di un buon sito. È di­mo­stra­to che tempi di ca­ri­ca­men­to lunghi portano i vi­si­ta­to­ri ad ab­ban­do­na­re in fretta la pagina senza aver avuto il tempo di ve­ri­fi­car­ne la qualità dei contenuti. La velocità di ca­ri­ca­men­to di una pagina (Pagespeed) rientra già dal 2010 tra i fattori di ranking di Google, oltre che essere un elemento della user ex­pe­rien­ce moderna. Di con­se­guen­za i gestori di un sito do­vreb­be­ro con­fron­tar­si con questo tema e ot­ti­miz­za­re la velocità del loro sito. Per fare ciò, si ha a di­spo­si­zio­ne la pos­si­bi­li­tà di com­pri­me­re le immagini, con­den­sa­re o ot­ti­miz­za­re i file del codice, oltre che diminuire il numero delle richieste. Un altro modo di al­leg­ge­ri­re il web server è l’utilizzo di un server reverse proxy, un com­po­nen­te software che svolge la funzione di in­ter­fac­cia tra il browser e il web server, ela­bo­ran­do come sostituto le richieste del browser e con­se­gnan­do au­to­no­ma­men­te i contenuti me­mo­riz­za­ti nella cache senza con­tat­ta­re il web server. Ciò è par­ti­co­lar­men­te efficace, se il server crea ogni volta una pagina dinamica nel CMS, ma senza che vi siano co­stan­te­men­te delle modifiche. Tra le soluzioni più diffuse per rea­liz­za­re un proxy cache di questo tipo rientra il programma libero Squid.

Che cos’è Squid?

Squid è un software server proxy, ri­la­scia­to da Duane Wessels nel 1998 e nato dalla scissione del progetto “Harvest object cache“; pa­ral­le­la­men­te è stata messa a di­spo­si­zio­ne anche una versione com­mer­cia­le con il nome di NetCache, di cui si è però sospeso ogni ulteriore sviluppo. Squid è ri­la­scia­to con licenza GNU General Public e supporta tra gli altri i pro­to­col­li HTTP, HTTP/2, HTTPS e FTP, oltre che fun­zio­na­re sulla maggior parte dei sistemi operativi comuni, come le diverse di­stri­bu­zio­ni di Linux, Mac OS X o Windows. Il proxy server è uti­liz­za­bi­le in modo classico tramite uno strumento a riga di comando o tramite un’in­ter­fac­cia grafica come GAdmin- SQUID o SquidMan.

Migliaia di am­mi­ni­stra­to­ri ap­pro­fit­ta­no delle pos­si­bi­li­tà di caching del proxy open source: Wikipedia, ad esempio, ha uti­liz­za­to per anni più proxy Squid per la vi­sua­liz­za­zio­ne dei contenuti, per al­leg­ge­ri­re il carico del database e del web server. Inoltre Squid può anche occuparsi della struttura delle con­nes­sio­ni SSL grazie al supporto dell’HTTPS e anche i diversi provider di tutto il mondo lo usano come proxy tra­spa­ren­te per garantire un’ot­ti­miz­za­zio­ne dell’accesso ad Internet. Ov­via­men­te potete uti­liz­za­re il software open source anche per gestire un forward proxy tra­di­zio­na­le per un singolo client, na­scon­de­re così il proprio indirizzo IP e ricevere una pro­te­zio­ne ag­giun­ti­va per il fil­trag­gio dei pacchetti del firewall. Al­ter­na­ti­va­men­te Squid può filtrare anche i pacchetti in maniera autonoma con l’esten­sio­ne Squid­Guard.

Perché dovreste uti­liz­za­re un server proxy Squid

Squid è sin dalla sua prima versione un prodotto open source, ragion per cui non ci sono costi di licenza e il codice sorgente è di­spo­ni­bi­le li­be­ra­men­te. Quindi non solo potete scaricare il software gra­tui­ta­men­te, ma potete anche adattarlo alle vostre esigenze. È però ne­ces­sa­rio solo raramente: l’espe­rien­za decennale dei la­vo­ra­to­ri del progetto Squid, che offrono as­si­sten­za su base vo­lon­ta­ria e con­ti­nua­no a svi­lup­pa­re il programma, emerge no­te­vol­men­te nella varietà e nell’ot­ti­miz­za­zio­ne della velocità offerte da Squid. Anche per uso privato, il software fa una buona im­pres­sio­ne grazie a liste di controllo degli accessi (Access Control Lists), de­fi­ni­bi­li au­to­no­ma­men­te. Da una parte è possibile bloccare l’accesso a contenuti specifici o limitare la banda larga usu­frui­bi­le, dall’altra potete ana­liz­za­re i log del proxy impostato senza problemi per con­trol­la­re il traffico dati. Una proprietà im­por­tan­te di Squid consiste inoltre nell’elevata fles­si­bi­li­tà che risulta par­ti­co­lar­men­te utile nelle reti più grandi e complesse. Così è, ad esempio, possibile creare una rete di proxy cache, ri­cor­ren­do a più proxy Squid e di­stri­buen­do le richieste su di loro. Questa rete al­leg­ge­ri­sce i singoli com­po­nen­ti e aumenta no­te­vol­men­te la stabilità del server. Come in una Content Delivery Network, i singoli server reverse proxy si possono trovare in luoghi diversi.

Come funziona il caching del proxy

Le funzioni elencate di controllo e sicurezza sono in­di­ca­ti­ve della ver­sa­ti­li­tà di questo software open source. Prima di tutto, Squid convince per le sue funzioni prin­ci­pa­li di server proxy per la me­mo­riz­za­zio­ne dei dati nella cache. Per as­si­cu­ra­re che i dati rimangano sempre attuali e di­spo­ni­bi­li, Squid calcola re­go­lar­men­te il suo stato, dove sono possibili due risultati: l’oggetto ve­ri­fi­ca­to può essere ancora attuale (fresh) o scaduto (stale). Per evitare di con­trol­la­re sempre la stessa serie di dati, un algoritmo calcola la frequenza ne­ces­sa­ria per la verifica di ogni singolo oggetto. Fanno parte della va­lu­ta­zio­ne le seguenti in­for­ma­zio­ni:

LM last modified; in­for­ma­zio­ne dell’header che indica la data dell’ultima modifica ef­fet­tua­ta
EX expire; in­for­ma­zio­ne dell’header che indica la data di scadenza di un oggetto
NOW La data corrente
OBJ_Date La data di me­mo­riz­za­zio­ne nella cache di Squid e la data dell’ultima modifica ef­fet­tua­ta
MIN Il tempo minimo di con­ser­va­zio­ne nella cache
MAX Il tempo massimo di con­ser­va­zio­ne nella cache
PERCENT Il fattore di con­ser­va­zio­ne
Obj_Age Descrive da quale momento un oggetto si trova nella cache (NOW - OBJ_Date)
LM_Age L’età di un oggetto al momento della me­mo­riz­za­zio­ne nella cache (OBJ_Date - LM)
LM_FACTOR Fattore di età (Obj_Age / LM_Age)

Un oggetto viene con­ser­va­to nella cache fino al momento X. La formula cor­ri­spon­den­te per il calcolo è:

X = OBJ_Date + (LM_Age * PERCENT)

L’algoritmo agisce nel modo seguente: il server proxy Squid controlla lo stato di un oggetto più fre­quen­te­men­te, se vengono apportate spesso delle modifiche a questo oggetto. Il primo momento di verifica è quindi indicato da MIN, che cor­ri­spon­de alla con­ser­va­zio­ne minima assegnata nella cache. Suc­ces­si­va­men­te, quando la data massima di con­ser­va­zio­ne MAX è stata raggiunta, Squid deve con­tat­ta­re comunque il web server. Per questo il software proxy invia una richiesta GET con l’in­for­ma­zio­ne If-Modified-Since com­pren­si­va di OBJ_DATE. Il server web verifica lo stato dell’oggetto e invia a seconda dei casi

  • il codice di stato 304 (not modified), se l’oggetto non è stato mo­di­fi­ca­to
  • o il codice di stato 200 (OK) e risponde inviando il nuovo oggetto mo­di­fi­ca­to.

Così i dati vengono trasmessi nuo­va­men­te, solo se è stato veramente mo­di­fi­ca­to qualcosa.

Quali sono le esigenze hardware di Squid?

Se volete uti­liz­za­re un reverse proxy con Squid per il vostro web server, dovreste prima di tutto as­si­cu­rar­vi di disporre delle strutture hardware ne­ces­sa­rie. Un proxy cache non richiede par­ti­co­la­ri pre­sta­zio­ni del pro­ces­so­re, ma prevede solo le giuste di­men­sio­ni della RAM e del disco fisso. Entrambi i com­po­nen­ti sono oggi alla portata di tutti, perciò la scelta non ricade tanto sul prezzo, quanto piuttosto sulla giusta cal­co­la­zio­ne. Quindi dovreste misurare at­ten­ta­men­te le vostre esigenze sulla base del vostro progetto web e tenere in con­si­de­ra­zio­ne anche la po­ten­zia­le crescita. Quando comprate l’hardware, af­fi­da­te­vi a com­po­nen­ti moderni come le memorie SSD, che si con­trad­di­stin­guo­no per tempi di accesso veloci e con­sen­to­no così la migliore ot­ti­miz­za­zio­ne possibile della velocità.

Come funziona Squid: l’in­stal­la­zio­ne

Ge­ne­ral­men­te ci sono due modi per in­stal­la­re il software Squid sul vostro sistema. La prima variante prevede che Squid si trovi nel gestore dei pacchetti della di­stri­bu­zio­ne che state uti­liz­zan­do e in questo caso l’in­stal­la­zio­ne del proxy avviene secondo lo schema co­no­sciu­to dalla riga di comando. Su Ubuntu il comando da dare è ad esempio:

sudo apt-get update
sudo apt-get install squid

Il secondo metodo di in­stal­la­zio­ne è quello tramite download dei file di in­stal­la­zio­ne, che de­com­pri­me­te e compilate ugual­men­te secondo il modo classico (nell’esempio si tratta della versione 3.5.20):

tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make

Con il comando:

make install

avviate l‘in­stal­la­zio­ne. A partire dalla versione 3.5, per i sistemi Windows (a 64 bit) c’è un pacchetto di in­stal­la­zio­ne MSI (non ufficiale) già pronto, che potete eseguire dopo il download con un doppio click sul file. Per ogni versione Stable ri­la­scia­ta, si trovano anche le versioni beta e de­ve­lo­p­ment, che com­pren­do­no nuove funzioni; entrambe le versioni servono però prima di tutto per testare queste fun­zio­na­li­tà, perciò dovreste uti­liz­zar­le, solo se conoscete già bene Squid.

Come con­fi­gu­ra­re il server proxy con Squid per rendere più veloce il sito

Nel file di con­fi­gu­ra­zio­ne squid.conf definite lo scopo del tipo di proxy Squid. Ge­ne­ral­men­te si trova in /etc o /usr/local/squid/etc/ o ancora nella cartella che avete scelto durante l’in­stal­la­zio­ne. Esistono già diverse im­po­sta­zio­ni pre­de­fi­ni­te che co­min­cia­no con una riga di commento, con­tras­se­gna­ta con il simbolo del can­cel­let­to (#). Nei seguenti paragrafi abbiamo raccolto le opzioni più im­por­tan­ti di cui avete bisogno per con­fi­gu­ra­re Squid.

Le opzioni di rete: # NETWORK OPTIONS

In questo campo con­fi­gu­ra­te gli indirizzi IP e le porte che sono rilevanti per il fun­zio­na­men­to di Squid. Le seguenti voci sono im­por­tan­ti per il proxy cache: http_port Sintassi: http_port [nome host o indirizzo IP:]Numero della porta De­scri­zio­ne: definisce la porta, su cui Squid ascolta le richieste HTTP dei client. Di default è inserita la porta 3128.  Se viene stabilito anche il nome host e l’indirizzo IP, le im­po­sta­zio­ni valgono per tutti gli indirizzi IP collegati. È possibile indicare anche più porte. Esempio: http_port 192.168.0.1:3128 https_port Sintassi: https_port [Indirizzo IP:]numero della porta cert=percorso per il cer­ti­fi­ca­to SSL [key=percorso per giungere alla chiave SSL privata] [options] De­scri­zio­ne: l’in­di­ca­zio­ne della porta HTTPS è ne­ces­sa­ria, se il proxy con Squid deve accettare sia con­nes­sio­ni SSL che TLS. L’in­di­ca­zio­ne del percorso sul cer­ti­fi­ca­to uti­liz­za­to (nel formato PEM) è ob­bli­ga­to­rio. Se non inserite alcuna chiave SSL privata, Squid pre­sup­po­ne au­to­ma­ti­ca­men­te che il file PEM comprenda già la chiave privata. Con il parametro options potete indicare opzioni ag­giun­ti­ve basate sulla do­cu­men­ta­zio­ne di OpenSSL. icp_port Sintassi: icp_port numero della porta De­scri­zio­ne: qui indicate la porta tramite la quale Squid accetta le richieste ICP (Internet Cache Protocol) e riceve i pacchetti UDP. È ne­ces­sa­ria indicarla solo se uti­liz­za­te più proxy, che devono co­mu­ni­ca­re tra di loro. La porta standard è la 3130; per attivare la funzione, potete inserire il parametro 0. Esempio: icp_port 3130

Opzioni di caching: # OPTIONS WHICH AFFECT THE CACHE SIZE

Tra le opzioni di caching stabilite se e quanta RAM viene richiesta dal vostro proxy Squid per scopi di caching o definite la grandezza minima e massima delle di­men­sio­ni dell’oggetto, oltre che il com­por­ta­men­to generale di caching.

cache_mem

Sintassi: cache_mem RAM in MB

De­scri­zio­ne: con cache_mem de­ter­mi­na­te le di­men­sio­ni della memoria prin­ci­pa­le riservata per gli oggetti di passaggio (In-Transit Objects), gli oggetti più richiesti (Hot Objects) e quelli non più me­mo­riz­za­bi­li nella cache (Negative-Cached Objects). Visto che questi dati sono presenti in blocchi di 4 KB ciascuno, anche il valore inserito qui deve essere un multiplo di 4 KB. Non con­fon­de­te questa opzione con la richiesta dello spazio ne­ces­sa­rio di Squid, che non viene regolata in questo modo.

Esempio: cache_mem 256 MB

maximum_object_size

Sintassi: maximum_object_size Di­men­sio­ne dell’oggetto in KB/MB

De­scri­zio­ne: questa voce informa Squid fino a quale di­men­sio­ne possono essere salvati gli oggetti nella cache. Stabilite il limite minimo delle di­men­sio­ni con il parametro minimum_object_size.

Esempio: maximum_object_size 4 MB

In­di­ca­zio­ni della cartella di caching e dei file di log: # LOGFILE PATHNAMES AND CACHE DI­REC­TO­RIES

Oltre a in­di­ca­zio­ni sulle porte e il com­por­ta­men­to di caching, il server Squid ha bisogno di in­for­ma­zio­ni su quale cartella deve me­mo­riz­za­re tem­po­ra­nea­men­te i contenuti e i file di log generati.

cache_dir

Sintassi: cache_dir tipo di cartella percorso della cartella spazio occupato numero delle cartelle

De­scri­zio­ne: con cache_dir decidete la cartella di caching e la capacità di memoria massima in megabyte, oltre che il numero delle cartelle e delle sot­to­car­tel­le. Il tipo di cartella in­stal­la­to di base è ufs. Ge­ne­ral­men­te quest’opzione è di­sat­ti­va­ta e bisogna perciò attivarla.

Esempio: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

cache_log

Sintassi: cache_log Percorso del file

De­scri­zio­ne: sta­bi­li­sce il luogo di me­mo­riz­za­zio­ne del file di log del vostro server proxy Squid, che registra le in­for­ma­zio­ni generali sul com­por­ta­men­to del software.

Esempio: cache_log /usr/local/squid/var/logs/cache.log

Opzioni di accesso: # ACCESS CONTROLS

Infine, vi servono per le porte uti­liz­za­te da Squid liste di controllo degli accessi chia­ra­men­te definite. Qui sono decisivi spe­cial­men­te i seguenti due parametri: acl Sintassi: acl nome della lista tipo di lista tema De­scri­zio­ne: qui avete la pos­si­bi­li­tà di creare una lista di controllo degli accessi det­ta­glia­ta per tutte le con­nes­sio­ni HTTP, ICP e TCP. Per una precisa pa­no­ra­mi­ca sui tipi e le opzioni, si consiglia di dare un’occhiata al manuale ufficiale online. Esempio: acl all src 0.0.0.0 http_access Sintassi: http_acess allow|deny [!]nome della lista De­scri­zio­ne: autorizza (allow) o vieta (deny) l’accesso alla porta HTTP sulla base delle liste di controllo degli accessi impostate. An­te­po­nen­do il punto escla­ma­ti­vo, l’as­se­gna­zio­ne è valida per tutte le con­nes­sio­ni che non ap­par­ten­go­no alla lista in questione. Esempio: htttp_access deny !SSL_ports

Vai al menu prin­ci­pa­le