---
title: "Cara Mengaktifkan Nginx FastCGI Cache untuk WordPress"
description: "Panduan menyalakan FastCGI cache Nginx untuk WordPress: zona cache, aturan lewati untuk admin dan keranjang, header cek HIT, dan cara membersihkan cache."
url: "https://nivelva.com/insight/cara-mengaktifkan-nginx-fastcgi-cache-wordpress"
category: "Server \u0026 Infrastruktur"
tags: ["nginx","fastcgi cache","wordpress","cache","php-fpm"]
author: "Lucas Tan"
published: "2026-11-11T12:57:00+07:00"
updated: "2026-11-11T12:57:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Mengaktifkan Nginx FastCGI Cache untuk WordPress

> **Jawaban singkat:** FastCGI cache membuat Nginx menyimpan halaman HTML hasil PHP dan menyajikannya langsung tanpa memanggil PHP-FPM dan database. Aktifkan dengan fastcgi_cache_path, kunci cache, dan aturan lewati untuk pengguna login, admin, serta halaman keranjang.

WordPress di VPS terasa lambat begitu pengunjung ramai, padahal kebanyakan yang dibuka adalah artikel yang sama? Itu karena setiap kunjungan memaksa PHP menyusun halaman dari awal dan bertanya ke database. FastCGI cache di Nginx memotong jalur itu: halaman yang sudah jadi disimpan di disk, lalu pengunjung berikutnya langsung menerima salinannya tanpa menyentuh PHP sama sekali.

Panduan ini untuk WordPress yang berjalan di Nginx dan PHP-FPM, misalnya hasil [pemasangan Nginx, MariaDB, dan PHP di Ubuntu 24.04](https://nivelva.com/insight/cara-pasang-nginx-mariadb-php-ubuntu-24-04). Kalau kamu memakai hosting cPanel atau LiteSpeed, cara ini tidak berlaku karena web server-nya berbeda.

## Sebelum mulai, pahami apa yang di-cache

FastCGI cache adalah page cache di tingkat server. Yang disimpan adalah HTML utuh untuk satu alamat. Ini berbeda dengan object cache seperti Redis yang menyimpan hasil query database. Perbedaan keduanya dibahas di [page cache, object cache, dan Redis di WordPress](https://nivelva.com/insight/caching-wordpress-redis).

Konsekuensinya, halaman yang isinya berbeda per orang tidak boleh di-cache. Admin yang sedang login, keranjang belanja, checkout, dan halaman akun harus selalu dilewatkan ke PHP. Bagian terpenting dari panduan ini justru aturan pengecualian tersebut.

## Langkah mengaktifkan FastCGI cache

### 1. Siapkan zona cache di blok http

Buka `/etc/nginx/nginx.conf` atau buat file baru `/etc/nginx/conf.d/fastcgi-cache.conf` (file di `conf.d` sudah dimuat di dalam blok `http` pada paket Nginx Ubuntu):

```
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WPCACHE:10m max_size=1g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
```

Artinya:

- `keys_zone=WPCACHE:10m` membuat zona memori bernama WPCACHE untuk menyimpan kunci. Dokumentasi Nginx menyebut zona 1 MB bisa menampung sekitar 8 ribu kunci, jadi 10 MB sudah lega untuk situs biasa.
- `max_size=1g` membatasi ukuran file cache di disk.
- `inactive=60m` menghapus halaman yang tidak diakses selama 60 menit, terlepas dari masa berlakunya.
- `fastcgi_cache_key` menentukan apa yang membedakan satu halaman dengan halaman lain.

Buat foldernya: `sudo mkdir -p /var/cache/nginx/wordpress`.

### 2. Tulis aturan kapan cache dilewati

Di dalam blok `server` situs WordPress, sebelum blok `location`, tambahkan:

```
set $skip_cache 0;

if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }

if ($request_uri ~* "/wp-admin/|/wp-json/|/xmlrpc.php|wp-.*\.php|/feed/|sitemap(_index)?\.xml") {
    set $skip_cache 1;
}

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}
```

Untuk toko WooCommerce, tambahkan pengecualian halaman keranjang dan cookie keranjang:

```
if ($request_uri ~* "/cart/|/checkout/|/my-account/") { set $skip_cache 1; }
if ($http_cookie ~* "woocommerce_items_in_cart|woocommerce_cart_hash") { set $skip_cache 1; }
```

Sesuaikan alamat `/cart/` dan lainnya bila toko kamu memakai slug berbahasa Indonesia, misalnya `/keranjang/`.

### 3. Pasang cache di blok location PHP

Di blok `location ~ \.php$` yang sudah ada, tambahkan di bawah `fastcgi_pass`:

```
fastcgi_cache WPCACHE;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_use_stale error timeout updating http_500 http_503;
fastcgi_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
```

`fastcgi_cache_bypass` membuat permintaan tidak membaca dari cache, sedangkan `fastcgi_no_cache` membuat jawabannya tidak disimpan. Keduanya perlu dipasang bersama.

`fastcgi_cache_use_stale` membuat Nginx tetap menyajikan salinan lama bila PHP sedang error atau timeout, dan `fastcgi_cache_lock` mencegah banyak permintaan bersamaan memanggil PHP untuk halaman yang sama ketika cache-nya baru kedaluwarsa.

Satu jebakan kecil: di Nginx, kalau sebuah `location` punya `add_header` sendiri, header yang ditulis di tingkat `server` tidak diwariskan ke location itu. Jika kamu memasang header keamanan di blok `server`, salin juga ke blok PHP ini.

### 4. Uji konfigurasi dan muat ulang

```
sudo nginx -t
sudo systemctl reload nginx
```

### 5. Cek apakah cache bekerja

Dari laptop atau server lain, jalankan dua kali:

```
curl -sI https://domainkamu.com/ | grep -i x-cache-status
```

Permintaan pertama biasanya `MISS`, permintaan kedua `HIT`. Buka juga halaman admin atau tambahkan `?test=1` di alamat, statusnya harus `BYPASS`. Kalau kamu melihat `HIT` di halaman checkout, aturan pengecualian belum benar dan harus diperbaiki sebelum dipakai di produksi.

## Bagaimana membersihkan cache saat artikel diubah?

Ini titik lemah FastCGI cache. Nginx versi open source tidak punya perintah bawaan untuk menghapus satu halaman dari cache. Pilihannya:

| Cara | Kelebihan | Kekurangan |
|:--|:--|:--|
| Masa berlaku pendek (misalnya 10 sampai 60 menit) | Paling sederhana | Perubahan baru terlihat setelah masa berlaku habis |
| Hapus seluruh folder cache | Pasti bersih | Semua halaman harus dibangun ulang |
| Plugin seperti Nginx Helper | Membersihkan otomatis saat posting diubah | Butuh izin tulis ke folder cache, atau modul purge tambahan |

Menghapus seluruh cache cukup dengan:

```
sudo find /var/cache/nginx/wordpress -type f -delete
```

> **Hati-hati dengan halaman pribadi:**
>
> Kesalahan aturan pengecualian bisa membuat halaman akun atau keranjang seseorang tersimpan dan ditampilkan ke pengunjung lain. Uji dengan akun pelanggan percobaan sebelum mengaktifkan cache di toko online.

## Pertanyaan yang sering diajukan

### Apakah FastCGI cache masih perlu kalau sudah pakai plugin cache WordPress?

Tidak wajib keduanya. FastCGI cache bekerja sebelum PHP dipanggil, jadi biasanya lebih ringan dari plugin page cache yang berjalan di PHP. Pakai salah satu saja untuk page cache agar tidak membingungkan saat membersihkan.

### Berapa lama masa berlaku cache yang ideal?

Tergantung seberapa sering isi situs berubah. Blog yang jarang update bisa memakai beberapa jam. Situs berita atau toko dengan stok yang sering berubah lebih aman dengan masa berlaku pendek ditambah pembersih otomatis.

### Apakah cache ini memengaruhi pengunjung yang login?

Tidak, selama aturan cookie `wordpress_logged_in` terpasang. Pengunjung yang login selalu dilewatkan ke PHP.

### Kenapa statusnya selalu MISS?

Penyebab umum adalah WordPress atau plugin mengirim cookie di setiap halaman, header Cache-Control no-cache dari plugin, atau ada query string. Periksa header respons lengkap dengan `curl -I`.

Checklist singkat:

- Zona cache dan kunci cache dibuat di blok `http`
- Pengecualian POST, query string, admin, cookie login, dan halaman toko terpasang
- Header `X-Cache-Status` menunjukkan HIT di halaman publik dan BYPASS di admin
- Cara membersihkan cache sudah ditentukan

## Sumber

- <https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html>
- <https://developer.wordpress.org/advanced-administration/server/web-server/nginx/>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-mengaktifkan-nginx-fastcgi-cache-wordpress
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
