# Squid: il proxy open source multipiattaforma

La performance rientra ormai da tempo tra le proprietà più importanti di un buon sito. È dimostrato che **tempi di caricamento** lunghi portano i visitatori ad abbandonare in fretta la pagina senza aver avuto il tempo di verificarne la qualità dei contenuti. La velocità di caricamento di una pagina (Pagespeed) rientra già dal 2010 tra i fattori di ranking di Google, oltre che essere un elemento della **user experience moderna**. Di conseguenza i gestori di un sito dovrebbero confrontarsi con questo tema e ottimizzare la velocità del loro sito. Per fare ciò, si ha a disposizione la possibilità di [comprimere le immagini](https://www.ionos.it/digitalguide/siti-web/web-design/comprimere-le-immagini-con-laiuto-di-strumenti-gratuiti/), condensare o ottimizzare i file del codice, oltre che diminuire il numero delle richieste. Un altro modo di alleggerire il web server è l’utilizzo di un server reverse proxy, un componente software che svolge la funzione di **interfaccia tra il browser e il web server**, elaborando come sostituto le richieste del browser e consegnando autonomamente i contenuti memorizzati nella cache senza contattare il web server. Ciò è particolarmente efficace, se il server crea ogni volta una pagina dinamica nel CMS, ma senza che vi siano costantemente delle modifiche. Tra le soluzioni più diffuse per realizzare un proxy cache di questo tipo rientra il programma libero Squid.

## Che cos’è Squid?

Squid è un software server proxy, rilasciato da Duane Wessels nel 1998 e nato dalla scissione del progetto “Harvest object cache“; parallelamente è stata messa a disposizione anche una versione commerciale con il nome di NetCache, di cui si è però sospeso ogni ulteriore sviluppo. Squid è rilasciato con **licenza GNU General Public** e supporta tra gli altri i protocolli HTTP, HTTP/2, HTTPS e FTP, oltre che funzionare sulla maggior parte dei sistemi operativi comuni, come le diverse distribuzioni di **Linux**, **Mac OS X** o **Windows**. Il proxy server è utilizzabile in modo classico tramite uno strumento a riga di comando o tramite un’interfaccia grafica come [GAdmin- SQUID](https://mange.dynalias.org/linux/gadminsquid "GAdmin-SQUID: Interfaccia grafica di Linux per il vostro proxy Squid") o [SquidMan](http://squidman.net/squidman/ "Download di SquidMan").

Migliaia di amministratori approfittano delle possibilità di caching del proxy open source: Wikipedia, ad esempio, ha utilizzato per anni più proxy Squid per la visualizzazione dei contenuti, per alleggerire il carico del database e del web server. Inoltre Squid può anche occuparsi della struttura delle connessioni SSL grazie al **supporto dell’HTTPS** e anche i diversi provider di tutto il mondo lo usano come **proxy trasparente** per garantire un’ottimizzazione dell’accesso ad Internet. Ovviamente potete utilizzare il software open source anche per gestire un forward proxy tradizionale per un singolo client, nascondere così il proprio indirizzo IP e ricevere una **protezione** aggiuntiva per il filtraggio dei pacchetti del firewall. Alternativamente Squid può filtrare anche i pacchetti in maniera autonoma con l’estensione [SquidGuard](http://www.squidguard.org/ "SquidGuard: estensione veloce e flessibile per proxy Squid").

## Perché dovreste utilizzare 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 è disponibile liberamente. Quindi non solo potete **scaricare il software gratuitamente**, ma potete anche adattarlo alle vostre esigenze. È però necessario solo raramente: l’**esperienza decennale** dei lavoratori del progetto Squid, che offrono assistenza su base volontaria e continuano a sviluppare il programma, emerge notevolmente nella varietà e nell’ottimizzazione della velocità offerte da Squid. Anche per uso privato, il software fa una buona impressione grazie a **liste di controllo degli accessi** (Access Control Lists), definibili autonomamente. Da una parte è possibile bloccare l’accesso a contenuti specifici o limitare la banda larga usufruibile, dall’altra potete analizzare i **log** del proxy impostato senza problemi per controllare il traffico dati. Una proprietà importante di Squid consiste inoltre nell’elevata flessibilità che risulta particolarmente utile nelle reti più grandi e complesse. Così è, ad esempio, possibile creare una rete di proxy cache, ricorrendo a più proxy Squid e distribuendo le richieste su di loro. Questa rete alleggerisce i singoli componenti e **aumenta notevolmente la stabilità del server**. Come in una [Content Delivery Network](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/cose-una-cdn-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 indicative della versatilità di questo software open source. Prima di tutto, Squid convince per le sue funzioni principali di server proxy per la **memorizzazione dei dati nella cache**. Per assicurare che i dati rimangano sempre attuali e disponibili, Squid calcola regolarmente il suo stato, dove sono possibili due risultati: l’oggetto verificato può essere ancora attuale (fresh) o scaduto (stale). Per evitare di controllare sempre la stessa serie di dati, un algoritmo calcola la frequenza necessaria per la verifica di ogni singolo oggetto. Fanno parte della valutazione le seguenti informazioni:

<table>
  <tbody>
    <tr>
      <th>LM</th>
      <td>last modified; informazione dell’header che indica la data dell’ultima modifica effettuata</td>
    </tr>
    <tr>
      <th>EX</th>
      <td>expire; informazione dell’header che indica la data di scadenza di un oggetto</td>
    </tr>
    <tr>
      <th>NOW</th>
      <td>La data corrente</td>
    </tr>
    <tr>
      <th>OBJ\_Date</th>
      <td>La data di memorizzazione nella cache di Squid e la data dell’ultima modifica effettuata</td>
    </tr>
    <tr>
      <th>MIN</th>
      <td>Il tempo minimo di conservazione nella cache</td>
    </tr>
    <tr>
      <th>MAX</th>
      <td>Il tempo massimo di conservazione nella cache</td>
    </tr>
    <tr>
      <th>PERCENT</th>
      <td>Il fattore di conservazione</td>
    </tr>
    <tr>
      <th>Obj\_Age</th>
      <td>Descrive da quale momento un oggetto si trova nella cache (NOW - OBJ\_Date)</td>
    </tr>
    <tr>
      <th>LM\_Age</th>
      <td>L’età di un oggetto al momento della memorizzazione nella cache (OBJ\_Date - LM)</td>
    </tr>
    <tr>
      <th>LM\_FACTOR</th>
      <td>Fattore di età (Obj\_Age / LM\_Age)</td>
    </tr>
  </tbody>
</table>

Un oggetto viene conservato nella cache fino al momento X. La formula corrispondente per il calcolo è:

```none
X = OBJ_Date + (LM_Age * PERCENT)
```

L’algoritmo agisce nel modo seguente: il server proxy Squid controlla lo stato di un oggetto più frequentemente, se vengono apportate spesso delle modifiche a questo oggetto. Il primo momento di verifica è quindi indicato da MIN, che corrisponde alla conservazione minima assegnata nella cache. Successivamente, quando la data massima di conservazione MAX è stata raggiunta, Squid deve contattare comunque il web server. Per questo il software proxy invia una richiesta GET con l’informazione ***If-Modified-Since*** comprensiva 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 modificato

- o il codice di stato 200 (*OK*) e risponde inviando il nuovo oggetto modificato.

Così i dati vengono trasmessi nuovamente, solo se è stato veramente modificato qualcosa.

## Quali sono le esigenze hardware di Squid?

Se volete utilizzare un reverse proxy con Squid per il vostro web server, dovreste prima di tutto assicurarvi di disporre delle strutture hardware necessarie. Un proxy cache **non richiede particolari prestazioni del processore**, ma prevede solo le giuste dimensioni della RAM e del disco fisso. Entrambi i componenti sono oggi alla portata di tutti, perciò la scelta non ricade tanto sul prezzo, quanto piuttosto sulla giusta calcolazione. Quindi dovreste misurare attentamente le vostre esigenze sulla base del vostro progetto web e tenere in considerazione anche la potenziale crescita. Quando comprate l’hardware, affidatevi a componenti moderni come le [memorie SSD](https://www.ionos.it/digitalguide/server/know-how/la-soluzione-di-memorizzazione-del-futuro-il-disco-ssd/), che si contraddistinguono per **tempi di accesso veloci** e consentono così la migliore ottimizzazione possibile della velocità.

## Come funziona Squid: l’installazione

Generalmente ci sono due modi per installare il software Squid sul vostro sistema. La prima variante prevede che Squid si trovi nel **gestore dei pacchetti** della distribuzione che state utilizzando e in questo caso l’installazione del proxy avviene secondo lo schema conosciuto dalla riga di comando. Su Ubuntu il comando da dare è ad esempio:

```none
sudo apt-get update
sudo apt-get install squid
```

Il secondo metodo di installazione è quello tramite download dei [file di installazione](http://wiki.squid-cache.org/SquidFaq/BinaryPackages "Download del pacchetto di installazione di Squid per il sistema operativo"), che decomprimete e compilate ugualmente secondo il modo classico (nell’esempio si tratta della versione 3.5.20):

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

Con il comando:

```none
make install
```

avviate l‘installazione. A partire dalla versione 3.5, per i **sistemi Windows** (a 64 bit) c’è un [pacchetto di installazione MSI](http://squid.diladele.com/ "Pacchetto di installazione MSI già pronto per installare facilmente Squid su Windows") (non ufficiale) già pronto, che potete eseguire dopo il download con un doppio click sul file. Per ogni versione Stable rilasciata, si trovano anche le **versioni beta e development**, che comprendono nuove funzioni; entrambe le versioni servono però prima di tutto per testare queste funzionalità, perciò dovreste utilizzarle, solo se conoscete già bene Squid.

## Come configurare il server proxy con Squid per rendere più veloce il sito

Nel file di configurazione *squid.conf* definite lo scopo del tipo di proxy Squid. Generalmente si trova in */etc* o */usr/local/squid/etc/* o ancora nella cartella che avete scelto durante l’installazione. Esistono già diverse impostazioni predefinite che cominciano con una riga di commento, contrassegnata con il simbolo del cancelletto (#). Nei seguenti paragrafi abbiamo raccolto le opzioni più importanti di cui avete bisogno per configurare Squid.

### Le opzioni di rete: # NETWORK OPTIONS

In questo campo configurate gli indirizzi IP e le porte che sono rilevanti per il funzionamento di Squid. Le seguenti voci sono importanti per il proxy cache: ***http\_port*** **Sintassi**: http\_port \[*nome host o indirizzo IP*:\]*Numero della porta* **Descrizione:** 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 impostazioni 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 certificato SSL* \[key=*percorso per giungere alla chiave SSL privata*\] \[*options*\] **Descrizione:** l’indicazione della porta HTTPS è necessaria, se il proxy con Squid deve accettare sia connessioni SSL che TLS. L’indicazione del percorso sul certificato utilizzato (nel formato PEM) è obbligatorio. Se non inserite alcuna chiave SSL privata, Squid presuppone automaticamente che il file PEM comprenda già la chiave privata. Con il parametro *options* potete indicare opzioni aggiuntive basate sulla documentazione di [OpenSSL](https://www.openssl.org/docs/ "OpenSSL: documentazione sul toolikit di crittografia e SSL/TLS"). ***icp\_port*** **Sintassi**: icp\_port *numero della porta* **Descrizione:** qui indicate la porta tramite la quale Squid accetta le richieste ICP (Internet Cache Protocol) e riceve i pacchetti UDP. È necessaria indicarla solo se utilizzate più proxy, che devono comunicare 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 dimensioni dell’oggetto, oltre che il comportamento generale di caching.

***cache\_mem***

**Sintassi:** cache\_mem *RAM in MB*

**Descrizione:** con *cache\_mem* determinate le dimensioni della memoria principale riservata per gli oggetti di passaggio (*In-Transit Objects*), gli oggetti più richiesti (*Hot Objects*) e quelli non più memorizzabili 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 confondete questa opzione con la richiesta dello spazio necessario di Squid, che non viene regolata in questo modo.

**Esempio:** cache\_mem 256 MB

***maximum\_object\_size***

**Sintassi:** maximum\_object\_size *Dimensione dell’oggetto in KB/MB*

**Descrizione:** questa voce informa Squid fino a quale dimensione possono essere salvati gli oggetti nella cache. Stabilite il limite minimo delle dimensioni con il parametro *minimum\_object\_size.*

**Esempio:** maximum\_object\_size 4 MB

### Indicazioni della cartella di caching e dei file di log: # LOGFILE PATHNAMES AND CACHE DIRECTORIES

Oltre a indicazioni sulle porte e il comportamento di caching, il server Squid ha bisogno di informazioni su quale cartella deve memorizzare temporaneamente i contenuti e i file di log generati.

***cache\_dir***

**Sintassi**: cache\_dir *tipo di cartella percorso della cartella spazio occupato numero delle cartelle*

**Descrizione**: con cache\_dir decidete la cartella di caching e la capacità di memoria massima in megabyte, oltre che il numero delle cartelle e delle sottocartelle. Il tipo di cartella installato di base è ufs. Generalmente quest’opzione è disattivata 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*

**Descrizione**: stabilisce il luogo di memorizzazione del file di log del vostro server proxy Squid, che registra le informazioni generali sul comportamento del software.

**Esempio**: cache\_log /usr/local/squid/var/logs/cache.log

### Opzioni di accesso: # ACCESS CONTROLS

Infine, vi servono per le porte utilizzate da Squid liste di controllo degli accessi chiaramente definite. Qui sono decisivi specialmente i seguenti due parametri: ***acl*** **Sintassi**: acl *nome della lista tipo di lista tema* **Descrizione**: qui avete la possibilità di creare una lista di controllo degli accessi dettagliata per tutte le connessioni HTTP, ICP e TCP. Per una precisa panoramica sui tipi e le opzioni, si consiglia di dare un’occhiata al [manuale ufficiale online](http://www.squid-cache.org/Doc/config/acl/ "Manuale online di Squid: tutte le informazioni sul tema “Liste di controllo degli accessi“"). **Esempio**: acl all src 0.0.0.0 **http\_access** **Sintassi**: http\_acess allow|deny \[!\]*nome della lista* **Descrizione**: autorizza (*allow*) o vieta (*deny*) l’accesso alla porta HTTP sulla base delle liste di controllo degli accessi impostate. Anteponendo il punto esclamativo, l’assegnazione è valida per tutte le connessioni che non appartengono alla lista in questione. **Esempio**: htttp\_access deny !SSL\_ports


This is a markdown version of: [https://www.ionos.it/digitalguide/server/configurazione/squid-il-server-cache-libero-per-il-vostro-progetto-web/](https://www.ionos.it/digitalguide/server/configurazione/squid-il-server-cache-libero-per-il-vostro-progetto-web/) for AI/LLM consumption.