 Autor: [Monika Wojciechowska](/autorzy/monika-wojciechowska) Specjalistka SEO i treści webowych · Zweryfikowano Kwiecień 2026

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ść

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;
}

## 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 · 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 · 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 · 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/)