 Autor: [Tomasz Nowosielski](/autorzy/tomasz-nowosielski) Redaktor naczelny, analityk hostingu · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Nginx micro-caching — konfiguracja

# Nginx micro-caching — szybkie cache dla aplikacji dynamicznych

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Nginx

Aplikacje PHP i Node.js mogą generować setki żądań na sekundę do bazy danych — nawet gdy treść strony zmienia się raz na kilka minut. Nginx micro-caching rozwiązuje ten problem elegancko: cache z TTL zaledwie 1 sekundy pochłania skoki ruchu bez ryzyka wyświetlania nieaktualnych danych. Oto kompletna konfiguracja od podstaw.

## Czym jest micro-caching?

Micro-caching to strategia cachowania z bardzo krótkim TTL — zazwyczaj 1 sekundę. W odróżnieniu od tradycyjnego cache (TTL kilka godzin), micro-cache nie wymaga mechanizmu inwalidacji: po 1 sekundzie cache sam wygasa i następne żądanie odświeża dane.

Przy 1000 żądaniach na sekundę, micro-cache obsługuje 999 z pamięci RAM i tylko 1 trafia do backendu. Skutek: PHP-FPM lub Node.js są chronione przed nagłymi skokami ruchu, bez ryzyka wyświetlania danych starszych niż 1 sekunda.

## proxy\_cache\_path — konfiguracja strefy cache

Podstawowa konfiguracja wymaga zdefiniowania strefy cache w bloku `http` pliku `/etc/nginx/nginx.conf`:

\# /etc/nginx/nginx.conf — blok http{}

http {
    # Definicja strefy cache
    # levels=1:2         — struktura katalogów (zapobiega tysiącom plików w 1 katalogu)
    # keys\_zone=MICRO:10m — nazwa strefy i rozmiar pamięci na klucze (10 MB ~80k kluczy)
    # inactive=60s        — usuń wpisy nie używane przez 60s
    # max\_size=1g         — maks. rozmiar na dysku
    proxy\_cache\_path /var/cache/nginx/micro
                     levels=1:2
                     keys\_zone=MICRO:10m
                     inactive=60s
                     max\_size=1g;

    # Opcjonalnie: temp path (musi być na tym samym filesystem co cache\_path)
    proxy\_temp\_path /var/cache/nginx/tmp;
}

\# Utwórz katalogi i ustaw uprawnienia
sudo mkdir -p /var/cache/nginx/micro /var/cache/nginx/tmp
sudo chown -R www-data:www-data /var/cache/nginx/
sudo nginx -t && sudo systemctl reload nginx

## Konfiguracja proxy\_cache\_valid

W bloku `server` lub `location` aktywuj cache i ustaw TTL dla różnych kodów HTTP:

\# /etc/nginx/sites-available/twoja-domena.conf

server {
    listen 80;
    server\_name example.com www.example.com;

    # Zmienna do sterowania cache bypass
    set $skip\_cache 0;

    # POST żądania — nigdy nie cachuj
    if ($request\_method = POST) {
        set $skip\_cache 1;
    }

    # URL z query string — pomijaj cache
    if ($query\_string != "") {
        set $skip\_cache 1;
    }

    # WordPress: admin, login, zalogowani użytkownicy, koszyk WooCommerce
    if ($request\_uri ~\* "(/wp-admin/|/wp-login.php|/cart/|/checkout/|/my-account/)") {
        set $skip\_cache 1;
    }
    if ($cookie\_wordpress\_logged\_in) {
        set $skip\_cache 1;
    }
    if ($cookie\_woocommerce\_cart) {
        set $skip\_cache 1;
    }

    location / {
        proxy\_pass http://127.0.0.1:9000;  # PHP-FPM przez FastCGI lub backend

        # Aktywuj strefę cache
        proxy\_cache MICRO;

        # Klucz cache — uwzględnia schemat, hosta i URI
        proxy\_cache\_key "$scheme$host$request\_uri";

        # TTL per kod HTTP
        proxy\_cache\_valid 200 301 1s;   # Sukces i redirect — micro-cache 1 sekunda
        proxy\_cache\_valid 404          1m;   # Nie znaleziono — 1 minuta
        proxy\_cache\_valid any          0s;   # Pozostałe — nie cachuj

        # Bypass i pomijanie cache
        proxy\_cache\_bypass $skip\_cache;
        proxy\_no\_cache     $skip\_cache;

        # Dodaj nagłówek informujący o statusie cache
        add\_header X-Cache-Status $upstream\_cache\_status;

        # Standardowe nagłówki proxy
        proxy\_set\_header Host $host;
        proxy\_set\_header X-Real-IP $remote\_addr;
        proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
        proxy\_set\_header X-Forwarded-Proto $scheme;
    }
}

## X-Cache-Status — diagnostyka cache

Nagłówek `X-Cache-Status` (lub `X-Nginx-Cache`) pozwala zobaczyć co Nginx robi z każdym żądaniem:

Wartość

Znaczenie

`HIT`

Odpowiedź serwowana z cache — backend nie był odpytywany

`MISS`

Cache nie miał tej odpowiedzi — żądanie trafiło do backendu i zostało zapisane

`BYPASS`

Cache pominięty przez proxy\_cache\_bypass (np. zalogowany użytkownik)

`EXPIRED`

Wpis w cache istniał, ale wygasł — backend odpytany, cache odświeżony

`STALE`

Serwowany stary wpis (np. gdy backend jest niedostępny i włączono proxy\_cache\_use\_stale)

`UPDATING`

Cache jest odświeżany w tle (proxy\_cache\_background\_update)

\# Sprawdź status cache dla strony
curl -I https://example.com/ | grep X-Cache-Status
# X-Cache-Status: HIT

# Pierwsze żądanie po wygaśnięciu
curl -I https://example.com/ | grep X-Cache-Status
# X-Cache-Status: MISS

## fastcgi\_cache — bezpośredni cache dla PHP-FPM

Jeśli Nginx komunikuje się z PHP-FPM przez FastCGI (bez pośredniego proxy), użyj `fastcgi_cache` zamiast `proxy_cache`:

\# /etc/nginx/nginx.conf — blok http
fastcgi\_cache\_path /var/cache/nginx/fastcgi
                   levels=1:2
                   keys\_zone=FASTCGI:10m
                   inactive=60s
                   max\_size=1g;

\# /etc/nginx/sites-available/wordpress.conf

location ~ \\.php$ {
    include fastcgi\_params;
    fastcgi\_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;

    # Aktywuj fastcgi\_cache
    fastcgi\_cache FASTCGI;
    fastcgi\_cache\_key "$scheme$host$request\_uri";
    fastcgi\_cache\_valid 200 1s;
    fastcgi\_cache\_valid 404 1m;

    fastcgi\_cache\_bypass $skip\_cache;
    fastcgi\_no\_cache     $skip\_cache;

    add\_header X-Cache-Status $upstream\_cache\_status;
}

## Purge cache — moduł nginx-cache-purge

Przy micro-cache TTL=1s purge jest rzadko potrzebny, ale przy dłuższym TTL (np. 60s) może być konieczny po zapisaniu nowego wpisu na blogu. Nginx nie ma wbudowanego purge — potrzebny jest moduł `ngx_cache_purge`:

\# Ubuntu: nginx-extras zawiera ngx\_cache\_purge
sudo apt install nginx-extras

# Konfiguracja purge endpointu (dostępny tylko z localhost)
location ~ /purge(/.\*) {
    allow 127.0.0.1;
    deny all;
    proxy\_cache\_purge MICRO "$scheme$host$1";
}

\# Purge konkretnego URL (z serwera)
curl -X PURGE http://localhost/purge/wp-content/uploads/2026/04/obraz.jpg
# Odpowiedź: Successful purge

# Weryfikacja — następne żądanie powinno dać MISS
curl -I https://example.com/artykul/ | grep X-Cache-Status

## Nginx micro-cache vs Varnish vs Redis page cache

Rozwiązanie

TTL

Purge

Złożoność

Kiedy używać

Nginx micro-cache

1s – 60s

Wymaga modułu

Niska

Ochrona przed skokami ruchu, WordPress

Varnish + VCL

Minuty/godziny

Natywny (PURGE)

Wysoka

Długi TTL, ESI, selektywna inwalidacja per-tag

Redis page cache

Minuty/godziny

Przez plugin/kod

Średnia

WordPress (WP Super Cache, W3TC), aplikacje PHP

LiteSpeed Cache

Minuty/godziny

Natywny

Niska (plugin WP)

Hosting LiteSpeed (LH.pl, home.pl)

## Kiedy micro-cache nie wystarczy?

-   **Spersonalizowane treści per użytkownik** — micro-cache nie działa gdy każdy użytkownik widzi inne dane (dashboard, koszyk). Użyj ESI (Varnish) lub pomijaj cache dla zalogowanych.
-   **Dane wymagające natychmiastowej aktualności** — kursy walut, stan magazynowy na żywo. TTL=1s może być za długi — rozważ Server-Sent Events lub WebSocket.
-   **Bardzo duże odpowiedzi API** — cachowanie kilkudziesięciu MB JSON na dysku jest nieefektywne. Rozważ Redis z TTL po stronie aplikacji.
-   **Ruch HTTPS z unique tokens w URL** — jeśli każdy URL jest unikalny (np. CSRF token w query string), cache key nigdy nie trafi. Przenieś tokeny do nagłówków lub ciasteczek.

## Najczęstsze pytania

Czym jest micro-caching w Nginx? +

Micro-caching to technika cachowania odpowiedzi przez bardzo krótki czas — typowo 1 sekundę. Nawet tak krótki TTL drastycznie redukuje liczbę żądań trafiających do backendu podczas skoków ruchu. Przy 1000 odwiedzających/sekundę, cache z TTL=1s obsługuje 999 żądań z pamięci i tylko 1 trafia do PHP-FPM lub Node.js. Nginx proxy\_cache obsługuje micro-caching natywnie.

Jak wyłączyć cache dla zalogowanych użytkowników WordPress? +

Użyj dyrektywy proxy\_cache\_bypass i proxy\_no\_cache z warunkami opartymi na ciasteczkach. Dla WordPress sprawdzaj obecność ciasteczek wordpress\_logged\_in\_\* oraz woocommerce\_cart i woocommerce\_session\_\*. Jeśli któreś z tych ciasteczek istnieje, Nginx pomija cache i przekazuje żądanie bezpośrednio do PHP-FPM. W konfiguracji: set $skip\_cache 0; if ($cookie\_wordpress\_logged\_in) { set $skip\_cache 1; } — i następnie proxy\_cache\_bypass $skip\_cache; proxy\_no\_cache $skip\_cache;

Jaką różnicę robi micro-caching w praktyce? +

Na stronie WordPress bez cache: przy 500 jednoczesnych użytkownikach PHP-FPM może dochodzić do 100% CPU i czas odpowiedzi wzrasta do kilku sekund. Z micro-caching TTL=1s: ten sam ruch obsługuje się przy 5-10% CPU, czas odpowiedzi spada do milisekund (cache HIT). Cache miss (pierwsze żądanie w danej sekundzie) nadal trafia do backendu, ale ich liczba jest minimalna. Efekt jest szczególnie widoczny podczas nagłych skoków ruchu (np. po publikacji artykułu).

Kiedy micro-caching nie wystarczy i trzeba użyć Varnish? +

Micro-caching Nginx sprawdza się przy TTL 1-60 sekund. Gdy potrzebujesz dłuższego cachowania (minuty/godziny) z selektywną inwalidacją per-URL lub per-tag, Varnish z VCL oferuje znacznie większą elastyczność. Varnish ma też lepsze wsparcie dla cache purge (natywna obsługa PURGE method), Edge Side Includes (ESI) do cachowania fragmentów stron oraz szczegółowe statystyki. Nginx micro-cache jest prostszy w konfiguracji i wystarczy dla większości stron WordPress i aplikacji PHP.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z pełną kontrolą nad Nginx — idealny do konfiguracji micro-cache

VPS

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

LH.pl

Hosting z LiteSpeed Cache — wbudowane cachowanie bez ręcznej konfiguracji

Managed Cache

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

Mikrus

Tani VPS do testowania konfiguracji Nginx micro-cache

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

## Powiązane strony

-   [Nginx load balancer — konfiguracja upstream](/baza-wiedzy/nginx-load-balancer-konfiguracja)
-   [Nginx virtual host — konfiguracja](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [PHP-FPM — konfiguracja i optymalizacja](/baza-wiedzy/php-fpm-konfiguracja-optymalizacja)
-   [Memcached vs Redis — porównanie](/baza-wiedzy/memcached-vs-redis-hosting)
-   [Wszystkie artykuły](/baza-wiedzy/)