Atunci când Nginx acționează ca Reverse Proxy în fața unor aplicații Node.js, Python/Django sau PHP-FPM, redirecționarea fiecărei cereri identice către backend poate bloca rapid baza de date și serverul de aplicație la vârfuri de trafic. Mecanismul proxy_cache permite salvarea răspunsurilor generate de backend pe discul serverului Nginx și servirea lor instantanee către ceilalți vizitatori, reducând timpul de răspuns de la 300 ms la sub 2 milisecunde.
Configurația completă de caching în /etc/nginx/sites-available/default
# În contextul http (definirea zonei de stocare pe disc și a indexului în RAM):
proxy_cache_path /var/cache/nginx/api_cache
levels=1:2
keys_zone=API_CACHE:10m # 10 MB de RAM memorează ~80.000 de chei de cache
max_size=1g # Limita maximă de spațiu pe disc
inactive=60m # Șterge fișierele neaccesate timp de 1 oră
use_temp_path=off;
server {
listen 80;
server_name api.dexblog.ro;
location / {
proxy_pass http://localhost:3000;
# 1. Activăm zona de cache:
proxy_cache API_CACHE;
# 2. Definim cheia unică de cache (Metodă + Host + URI + Argumente):
proxy_cache_key "$request_method$scheme$host$request_uri";
# 3. Microcaching: Păstrăm răspunsurile HTTP 200/301 timp de doar 10 secunde!
# Acest mic interval atenuează 95% din încărcarea bazei de date la știri virale:
proxy_cache_valid 200 301 10s;
proxy_cache_valid 404 1m;
# 4. Antet util de depanare în browser (HIT, MISS, BYPASS, EXPIRED):
add_header X-Cache-Status $upstream_cache_status;
# 5. Reziliență la căderi de backend (servește cache-ul vechi dacă backend-ul dă eroare!):
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on; # Permite unei singure cereri să interogheze backend-ul la expirare
}
}
Interpretarea Antetului X-Cache-Status
HIT:Răspunsul a fost servit instant din cache-ul Nginx (fără a atinge deloc aplicația backend).MISS:Răspunsul nu a fost găsit în cache, a fost interogat backend-ul și salvat pentru viitor.BYPASS:Cache-ul a fost ocolit deliberat (de exemplu pentru utilizatori autentificați cu cookie-uri de sesiune).STALE:Backend-ul a dat eroare 502, dar Nginx a salvat situația servind copia anterioară din cache.