Nginx Microcaching · 3 min read · Jan 22, 2026

Perché dovresti sempre usare Nginx con Microcaching

Perché dovresti sempre usare Nginx con Microcaching

Tutti sanno quanto sia difficile ottenere il massimo dai propri webserver. Nella mia occupazione quotidiana come ingegnere di hosting, questo significa che spesso ricevo la stessa domanda: “Wow, bel sito web, ma può gestire un traffico elevato?”.

La situazione “normale”

Un sito web “normale” che gira sotto Apache con mod_php dovrebbe essere in grado di gestire 20 richieste al secondo con facilità, ma cosa succede se ricevi 50 richieste al secondo (non è strano con alcuni siti web come quelli dei partiti politici, ecc.)? La risposta, a mio avviso, è abbandonare Apache, perché così com’è ora Apache non è più all’altezza.

SÌ! Nginx!

Ecco che arriva Nginx! Quindi, quello che devi fare è impostare il tuo sito web su Nginx e fare un rapido test di carico (ad esempio, 1000 richieste con 200 utenti concorrenti) e vedrai che non ottieni molto di più rispetto ad Apache, ma come? È molto semplice, è dovuto al fatto che Nginx non ha un modulo php integrato, quindi avresti bisogno di un processore fastcgi per elaborare le pagine php (ti consiglio di usare php-fpm poiché è migliore di spawn-cgi). Quindi, cosa dovrei usare ora, chiedi? Usa il microcaching!

Cos’è diavolo il Microcaching?

Cos’è il microcaching? Bene, la teoria è che tu memorizzi in cache i tuoi file, ecc. per un breve periodo di tempo (ad esempio, 1 secondo). Ciò significa che quando un utente richiede la pagina, la memorizza in cache, quindi la richiesta successiva per qualsiasi altra pagina verrà dalla cache, e con 100 utenti che richiedono entro 5 secondi solo 1 su 20 utenti dovrà costruire l’intera pagina (e con Nginx e un sito ben strutturato questo non è un problema).

Non ci credo!

Dovresti crederci! Lascia che ti faccia un esempio, prendi questo sito web su cui ti trovi adesso. Supponiamo di avere un test di carico di 1000 richieste con 200 utenti concorrenti. Se esegui questo sito web sotto Apache, otterresti tra 10-40 richieste al secondo, massimo! E il tuo webserver sarebbe sotto un carico serio e saresti costretto ad espandere il tuo ambiente. Sotto Nginx con php-fpm senza microcaching è la stessa cosa (forse un po’ più di richieste, ma il tuo server avrebbe molti processi php-fpm in esecuzione per elaborare le richieste). Con il microcaching ottieni un incredibile 300-450 richieste al secondo!

Ok, dammelo!

Il microcaching è in realtà facile da configurare, qui sotto c’è un esempio di configurazione che potresti eseguire per qualsiasi sito web realizzato con PHP (in questo caso è specifico per Wordpress). Dai un’occhiata:

#
# il tuo sito web
#
server {
    listen       80;
    server_name  ;
    access_log    main;
    error_log ;
    root   ;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # Imposta i valori predefiniti
        set $no_cache "";
        # Se non è GET/HEAD, non memorizzare in cache e contrassegna l'utente come non memorizzabile per 1 secondo tramite cookie
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # Rimuovi il cookie di non cache se necessario
        # (per qualche motivo, add_header fallisce se incluso nel blocco if precedente)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # Salta la cache se il cookie di non cache è impostato
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # Salta la cache se il flag è impostato
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

Dovresti anche inserire il formato della cache e la zona della cache nel tuo nginx.conf, aggiungi queste righe al tuo blocco http {}:

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

Provalo!

Incoraggio tutti a provarlo per vedere il miglioramento delle prestazioni! So che è un grande cambiamento passare da Apache a Nginx (in termini di configurazione), ma ci farai l’abitudine molto rapidamente!

Controlla http://livebyt.es per altri articoli in arrivo!

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.