1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Nginx FastCGI Cache

# Nginx FastCGI Cache - konfiguracja, bypass i WordPress

Opublikowano: 10 kwietnia 2026 · Kategoria: Wydajność

⚡ W skrócie · 9 min czytania

-   Nginx FastCGI Cache: fastcgi\_cache\_path, fastcgi\_cache\_key, bypass dla zalogowanych i WooCommerce, Nginx Cache Controller, benchmarki vs Redis page cache.
-   Podstawowa konfiguracja fastcgi\_cache\_path.
-   Konfiguracja virtual hosta z FastCGI Cache.
-   Bypass dla zalogowanych użytkowników i WooCommerce.
-   Integracja z WordPress - Nginx Cache Controller.

WordPress generuje każdą stronę od nowa: zapytanie do bazy, parsowanie PHP, budowanie HTML. Nawet zoptymalizowany WordPress potrzebuje 200-500 ms na odpowiedź. Nginx FastCGI Cache zapisuje gotowe odpowiedzi HTTP na dysku i serwuje je bez uruchamiania PHP-FPM - czas odpowiedzi spada do 1-5 ms. To najszybszy możliwy cache dla stron PHP bez dodatkowego oprogramowania.

## Podstawowa konfiguracja fastcgi\_cache\_path

Konfiguracja FastCGI Cache zaczyna się w bloku `http {}` pliku `/etc/nginx/nginx.conf` lub osobnym pliku `conf.d/fastcgi-cache.conf`. Dyrektywa `fastcgi_cache_path` definiuje lokalizację na dysku, hierarchię katalogów i rozmiar pamięci dla kluczy cache:

```
# /etc/nginx/conf.d/fastcgi-cache.conf lub w bloku http {} nginx.conf

fastcgi_cache_path /var/cache/nginx/wordpress
  levels=1:2
  keys_zone=wordpress_cache:100m
  max_size=2g
  inactive=60m
  use_temp_path=off;

# Wyjaśnienie parametrów:
# /var/cache/nginx/wordpress  - katalog na dysku (musi istnieć, właściciel nginx)
# levels=1:2                  - hierarchia podkatalogów (performance przy dużej liczbie plików)
# keys_zone=wordpress_cache   - nazwa strefy + 100m RAM na klucze (ok. 800 tys. kluczy)
# max_size=2g                 - maksymalny rozmiar cache na dysku
# inactive=60m                - usuń plik cache jeśli nie był żądany przez 60 minut
# use_temp_path=off           - zapisuj bezpośrednio do docelowego katalogu (szybciej na NVMe)

# Utwórz katalog i nadaj uprawnienia
sudo mkdir -p /var/cache/nginx/wordpress
sudo chown nginx:nginx /var/cache/nginx/wordpress
```

## Konfiguracja virtual hosta z FastCGI Cache

W bloku `server {}` dla WordPress definiujemy klucz cache, czas ważności, nagłówki diagnostyczne i reguły przekazywania do PHP-FPM. Kluczowa jest dyrektywa `fastcgi_cache_key` - na jej podstawie Nginx identyfikuje czy dana odpowiedź jest w cache:

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

# Zmienne bypass - ustawiamy poza blokiem server
map $http_cookie $skip_cache {
  default 0;
  "~*wordpress_logged_in"  1;
  "~*comment_author"       1;
  "~*woocommerce_cart_hash" 1;
  "~*woocommerce_items_in_cart" 1;
}

server {
  listen 443 ssl http2;
  server_name mojadomena.pl www.mojadomena.pl;

  root /var/www/wordpress;
  index index.php;

  # Klucz cache - unikalny identyfikator żądania
  fastcgi_cache_key "$scheme$request_method$host$request_uri";

  # Nagłówek diagnostyczny - HIT/MISS/BYPASS/EXPIRED
  add_header X-Cache $upstream_cache_status;

  # Strefa cache (nazwa z fastcgi_cache_path)
  fastcgi_cache wordpress_cache;

  # Czas ważności odpowiedzi z kodem 200
  fastcgi_cache_valid 200 301 302 60m;

  # Serwuj stale dane gdy PHP-FPM nie odpowiada (optional)
  fastcgi_cache_use_stale error timeout updating http_500 http_503;
  fastcgi_cache_background_update on;
  fastcgi_cache_lock on;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    # Włącz cache i bypass
    fastcgi_cache wordpress_cache;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $skip_cache $http_pragma;
    fastcgi_no_cache $skip_cache;

    # Pomijaj cache dla POST (formularze, AJAX)
    fastcgi_cache_methods GET HEAD;
  }
}
```

## Bypass dla zalogowanych użytkowników i WooCommerce

Zalogowani użytkownicy i strony koszyka WooCommerce muszą pomijać cache - inaczej użytkownik A widzi prywatne dane użytkownika B. Poniższy snippet rozszerza logikę bypass o URL-based rules i obsługę WooCommerce:

```
# W bloku server {} - przed blokami location

# Zmienna dla bypass oparty o URL
set $skip_cache 0;

# Panel admina i logowanie - zawsze bypass
if ($request_uri ~* "(/wp-admin/|/wp-login.php|/xmlrpc.php)") {
  set $skip_cache 1;
}

# WooCommerce - koszyk, checkout, konto użytkownika
if ($request_uri ~* "(/cart/|/checkout/|/my-account/|\\?wc-ajax=)") {
  set $skip_cache 1;
}

# Żądania POST - zawsze generuj świeżą odpowiedź
if ($request_method = POST) {
  set $skip_cache 1;
}

# Query string - np. ?preview=true, ?nocache=1
if ($query_string != "") {
  set $skip_cache 1;
}
```

## Integracja z WordPress - Nginx Cache Controller

Plugin **Nginx Cache Controller** (lub **Nginx Helper**) automatycznie inwaliduje cache po opublikowaniu wpisu, edycji lub dodaniu komentarza. Plugin wysyła żądanie PURGE do Nginx, który usuwa odpowiednie pliki z `/var/cache/nginx/wordpress/`. Aby PURGE działał, Nginx potrzebuje modułu `ngx_cache_purge`:

```
# Sprawdź czy ngx_cache_purge jest dostępny
nginx -V 2>&1 | grep cache_purge

# Na Ubuntu - zainstaluj nginx z modułem purge
sudo apt install nginx-extras

# Alternatywnie: ręczne czyszczenie cache przez skrypt
# /usr/local/bin/nginx-cache-clear.sh
#!/bin/bash
CACHE_DIR="/var/cache/nginx/wordpress"
find ${CACHE_DIR} -type f -delete
echo "FastCGI cache cleared: ${CACHE_DIR}"

# Konfiguracja Nginx dla PURGE (jeśli masz ngx_cache_purge)
# W bloku server {}:
location ~ /purge(/.*) {
  allow 127.0.0.1;
  deny all;
  fastcgi_cache_purge wordpress_cache "$scheme$request_method$host$1";
}
```

## Benchmarki FastCGI Cache vs Redis page cache

Porównanie wydajności na typowym serwerze VPS (2 vCPU, 4 GB RAM, NVMe SSD), WordPress z 50 wpisami, test Apache Bench: `ab -n 1000 -c 50 https://mojadomena.pl/`:

Konfiguracja

Req/s

Śr. czas \[ms\]

P99 \[ms\]

Użycie RAM

Bez cache (PHP-FPM + MySQL)

12

420

850

~180 MB

Redis Object Cache (WP plugin)

45

110

230

~220 MB

Redis Full Page Cache

180

18

45

~260 MB

**Nginx FastCGI Cache (dysk)**

**950**

**3**

**8**

**~160 MB**

FastCGI Cache + Redis (hybrydowy)

1100

2

6

~240 MB

Nginx FastCGI Cache wygrywa pod względem przepustowości (950 req/s vs 180 dla Redis Full Page Cache) i zużywa mniej RAM - bo cache jest na dysku, nie w pamięci. Wąskie gardło to I/O dysku; na NVMe SSD różnica jest minimalna. Konfiguracja hybrydowa (FastCGI na dysku + Redis dla obiektów WordPress) daje najlepsze wyniki.

## Diagnostyka i monitorowanie cache

```
# Sprawdź nagłówek X-Cache
curl -I https://mojadomena.pl/
# X-Cache: HIT   - serwowane z cache
# X-Cache: MISS  - pobrane z PHP, zapisano do cache
# X-Cache: BYPASS - pominięto cache (zalogowany użytkownik)

# Sprawdź rozmiar cache na dysku
du -sh /var/cache/nginx/wordpress/
ls -la /var/cache/nginx/wordpress/ | wc -l  # liczba plików

# Czyść cache ręcznie
sudo find /var/cache/nginx/wordpress/ -type f -delete

# Sprawdź logi Nginx dla błędów cache
sudo tail -f /var/log/nginx/error.log | grep cache

# Statystyki przez nginx status module
# W konfiguracji:
location /nginx_status {
  stub_status;
  allow 127.0.0.1;
  deny all;
}
```

Alternatywą dla FastCGI cache jest osobna warstwa cache HTTP przed serwerem WWW. Konfigurację VCL i integrację z WordPress opisujemy w poradniku [Varnish Cache - konfiguracja](/baza-wiedzy/varnish-cache-konfiguracja/).

## Najczęstsze pytania

Czym różni się Nginx FastCGI Cache od Redis page cache? +

Nginx FastCGI Cache przechowuje wygenerowane odpowiedzi HTTP bezpośrednio na dysku serwera - nie wymaga dodatkowego oprogramowania i działa na poziomie serwera WWW, przed PHP-FPM. Redis page cache (np. Redis Object Cache w WordPress) działa wewnątrz PHP i zapisuje obiekty PHP lub całe strony w pamięci RAM. FastCGI Cache jest szybszy dla pełnych stron HTML (zero PHP, zero bazy), ale Redis lepiej sprawdza się przy dynamicznych fragmentach i obiektach. W typowych konfiguracjach WordPress FastCGI Cache redukuje czas odpowiedzi z 200-500 ms do 1-5 ms.

Jak ominąć FastCGI Cache dla zalogowanych użytkowników WordPress? +

Przez zmienną fastcgi\_cache\_bypass i fastcgi\_no\_cache ustawiane na 1 gdy: (1) istnieje cookie wordpress\_logged\_in\_\* - zalogowany użytkownik, (2) comment\_author\_\* - nowy komentarz, (3) URL zawiera /wp-admin/, /wp-login.php - panel admina, (4) żądanie to POST - formularze, WooCommerce checkout. Nginx Cache Controller plugin dla WordPress automatycznie inwaliduje cache po opublikowaniu lub edycji wpisu, wysyłając nagłówek Purge do Nginx.

Jak sprawdzić czy Nginx FastCGI Cache działa? +

W konfiguracji Nginx dodaj add\_header X-Cache $upstream\_cache\_status - nagłówek w odpowiedzi HTTP będzie miał wartość HIT (z cache), MISS (pobrane z PHP, zapisane do cache), BYPASS (pominięcie cache dla zalogowanego użytkownika), EXPIRED (cache wygasł, pobrano świeże dane). Sprawdź przez curl -I https://mojadomena.pl - w nagłówkach zobaczysz X-Cache: HIT.

Jak skonfigurować FastCGI Cache dla WooCommerce? +

WooCommerce wymaga pominięcia cache dla stron koszyk (/cart), kasa (/checkout), konto (/my-account) i URL z parametrem wc-ajax. W konfiguracji Nginx dodaj: if ($request\_uri ~\* "/cart|/checkout|/my-account|wc-ajax") { set $skip\_cache 1; } Dodatkowo sprawdzaj cookie woocommerce\_cart\_hash i woocommerce\_items\_in\_cart - jeśli koszyk jest niepusty, pomijaj cache żeby użytkownik widział aktualne dane zamówienia.

## 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 NVMe SSD - szybki dysk to podstawa wydajnego FastCGI Cache

VPS + NVMe

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

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

Mikr.us

Budżetowy VPS do testów konfiguracji Nginx i FastCGI Cache

Dev/Test

[Aktywuj rabat →](/out/mikrus/#reklama "Mikr.us")

#Reklama · link partnerski

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

LH.pl

Hosting współdzielony z LiteSpeed - alternatywa dla Nginx FastCGI

Hosting

[Aktywuj rabat →](/out/lh-pl/#reklama "LH.pl")

#Reklama · link partnerski

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

## Powiązane strony

-   [Nginx Load Balancer - konfiguracja i algorytmy](/baza-wiedzy/nginx-load-balancer-konfiguracja/)
-   [PHP-FPM - konfiguracja i optymalizacja](/baza-wiedzy/php-fpm-konfiguracja-optymalizacja/)
-   [Memcached vs Redis - co wybrać na hostingu?](/baza-wiedzy/memcached-vs-redis-hosting/)
-   [Testowanie wydajności serwera - k6 i ApacheBench](/baza-wiedzy/load-testing-k6-ab/)
-   [Wszystkie artykuły](/baza-wiedzy/)
-   [Nginx micro-caching - szybkie cache dla aplikacji dynamicznych
    
    Nginx proxy\_cache jako micro-cache: proxy\_cache\_path, cache bypass dla zalogowanych (WordPress/WooCommerce),…
    
    ](/baza-wiedzy/nginx-cache-microcaching/)
-   [Varnish Cache - konfiguracja i integracja z WordPress
    
    Jak zainstalować i skonfigurować Varnish Cache na VPS. VCL basics, integracja z WordPress, purging cache, ESI,…
    
    ](/baza-wiedzy/varnish-cache-konfiguracja/)
-   [Jak wybrać hosting?](/jaki-hosting-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 10 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)