GNU/Linux >> Linux Esercitazione >  >> Linux

Come abilitare la memorizzazione nella cache FastCGI lato server con Nginx e PHP

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.


Linux
  1. Come installare e configurare Varnish Cache 6 con Nginx su CentOS 8

  2. Come configurare Nginx per funzionare con PHP tramite PHP-FPM

  3. Come installare e abilitare la cache PHP alternativa (APC) su CentOS

  4. Come installare PHP 7.4 con Nginx su Ubuntu 20.04

  5. Come installare Node.js con NVM e Nginx su Ubuntu 22.04

Come abilitare IPv6 in Nginx?

Come abilitare TLS 1.3 su Apache e Nginx

Come configurare PHP-FPM con NGINX

Come distribuire un'applicazione PHP con Nginx e MySQL utilizzando Docker e Docker Compose

Come installare e configurare Memcached con Apache e PHP

Come abilitare la libreria GD in PHP con LibJPEG, FreeType e LibPNG