Nginx è un server Web open source e ad alte prestazioni che può essere utilizzato per accelerare la distribuzione di contenuti e applicazioni. Nginx migliora la sicurezza, migliora la scalabilità e può anche essere utilizzato come sistema di bilanciamento del carico ad alta disponibilità. Può essere utilizzato come proxy inverso e uno degli usi più importanti di Nginx è la memorizzazione nella cache dei contenuti. Uno degli approcci migliori è utilizzare Nginx come cache dei contenuti. In questo articolo, discuteremo della memorizzazione nella cache dei contenuti di Nginx FastCGI per prestazioni migliori dei siti Web.
Abilitazione della memorizzazione nella cache FastCGI in Nginx
In questo articolo, assumiamo che tu abbia già installato Nginx con PHP sulla tua macchina Linux.
Per iniziare ad abilitare la memorizzazione nella cache FastCGI, modifica il file di configurazione dell'host virtuale in cui la memorizzazione nella cache deve essere abilitata.
$ cd /etc/nginx/conf.d
$ vi example.conf
Aggiungi il seguente contenuto all'inizio del file. Ricorda che le righe devono essere al di fuori della direttiva server {} .
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
Dove,
- percorso_cache_fastcgi – posizione della cache
- livelli – livello gerarchico della cache, imposta una gerarchia di directory a due livelli in /etc/nginx/cache
- keys_zone – nome della zona di memoria (In questo esempio ho usato MYAPP. Puoi avere la tua preferenza)
- inattivo – specifica il tempo dopo il quale i dati memorizzati nella cache a cui non si accede durante il tempo specificato vengono eliminati dalla cache. In questo esempio, il tempo di inattività è impostato su 60m che può essere aumentato o diminuito.
- fastcgi_cache_key – Specifica come verrà eseguito l'hashing dei nomi dei file della cache
Variabili utilizzate in factcgi_cache_key
- Schema $ – schema di richiesta HTTPS o HTTP
- $request_method – specifica i metodi di richiesta come GET o POST
- $host – Nome del server corrispondente alla richiesta
- $request_uri – URI richiesta completa
La posizione del file della cache può essere ovunque sul disco rigido, ma la dimensione dovrebbe essere inferiore alla RAM+swap del sistema per evitare il problema "Impossibile allocare memoria".
Ora vai alla direttiva location in cui la richiesta PHP viene passata a php-fpm. All'interno di "location ~ \.php$ {}" aggiungi le seguenti righe
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
Dove MYAPP è il nome della zona di memoria e fastcgi_cache_valid 200 memorizza nella cache tutte le risposte HTTP 200.
Se viene definito solo il tempo, vengono memorizzate nella cache 200, 301 e 302 risposte.
Esegui il comando seguente per testare la configurazione di Nginx vhost.
$ nginx -t
Ora riavvia il servizio Nginx.
$ systemctl restart nginx
Assomiglia a un file di configurazione vhost completo
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; root /usr/share/nginx/html; index index.php index.html index.htm; server_name your_server_name; location / { try_files $uri $uri/ /index.html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }
Test della memorizzazione nella cache FastCGI
Crea un semplice file PHP nella directory principale del documento.
$ vi /usr/share/nginx/html/info.php
Incolla il seguente contenuto e salva
<?php phpinfo(); ?>
Ora richiedi il file usando il comando curl o usando un browser
Se la memorizzazione nella cache funziona correttamente, puoi elencare la directory di memorizzazione nella cache in /etc/nginx/cache
Aggiungi la riga seguente sopra la direttiva server{} per indicare se la cache è stata persa o ha colpito
add_header X-Cache $upstream_cache_status;
Riavvia Nginx ed esegui il comando curl come
$ curl -I http://localhost/info.php
Impostazione delle eccezioni della cache in Nginx fastCGI Cache
A volte potrebbe non essere necessario memorizzare nella cache contenuti dinamici come le pagine di autenticazione di base. È possibile evitare che questi tipi di contenuti vengano memorizzati nella cache in base a diverse variabili come “$request_method” “”$request_uri” “$http_cookie” ecc.
Di seguito è riportata la configurazione di esempio per l'eccezione cache e dovrebbe essere utilizzata all'interno del server{}
direttiva.
#Cache everything by default set $no_cache 0; #Don't cache POST requests if ($request_method = POST) { set $no_cache 1; } #Don't cache if the URL contains a query string if ($query_string != "") { set $no_cache 1; } #Don't cache the following URLs if ($request_uri ~* "/(cp/)") { set $no_cache 1; } #Don't cache if there is a cookie called PHPSESSID if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
Conclusione
In questo articolo, abbiamo imparato come configurare Nginx con PHP per la memorizzazione nella cache dei contenuti dinamici. Inoltre, abbiamo appreso diversi suggerimenti per impostare le eccezioni della cache.