All Products
Search
Document Center

:Konfigurasikan kebijakan caching Apache

Last Updated:Jun 11, 2026

Konfigurasikan mod_expires atau mod_headers pada origin server Apache Anda untuk mengatur header respons Cache-Control dan Expires, sehingga node edge Alibaba Cloud CDN dan browser menyimpan cache konten statis Anda dengan TTL (Time to Live) yang tepat.

Pilih modul

Apache menyediakan dua modul untuk mengontrol header cache. Pilih berdasarkan kebutuhan Anda:

Modul

Kelebihan

Kekurangan

Kapan digunakan

mod_expires

Sintaks sederhana; mengatur Expires dan Cache-Control: max-age per tipe MIME dengan cepat

Tidak dapat mengatur direktif kompleks seperti no-store atau immutable

Skema sederhana yang hanya memerlukan max-age

mod_headers

Kontrol penuh atas header Cache-Control; mendukung semua direktif termasuk immutable

Sintaks sedikit lebih kompleks

Lingkungan produksi yang memerlukan kebijakan cache detail halus

Prasyarat

Sebelum memulai, pastikan modul Apache yang diperlukan telah diaktifkan.

Periksa modul yang dimuat:

apachectl -M | grep -E "expires|headers"

Output harus mencakup expires_module dan headers_module. Jika salah satunya tidak ada, aktifkan modul tersebut:

  • Debian / Ubuntu:

  sudo a2enmod headers expires
  sudo systemctl restart apache2
  • CentOS / RHEL / Alibaba Cloud Linux:

Modul biasanya sudah dikompilasi secara default. Jika suatu modul tidak tersedia, periksa /etc/httpd/conf.modules.d/ dan pastikan baris LoadModule terkait tidak dikomentari, lalu restart Apache:

  sudo systemctl restart httpd
Catatan

Letakkan konfigurasi dalam file khusus di bawah /etc/httpd/conf.d/ (CentOS/RHEL) atau /etc/apache2/conf-available/ (Debian/Ubuntu)—misalnya, cache.conf. Hindari penggunaan file .htaccess: Apache mengurai .htaccess pada setiap permintaan, yang menambah beban berlebihan dan menghilangkan keuntungan performa yang ingin Anda capai.

Contoh konfigurasi

Semua contoh menggunakan penjaga <IfModule> agar Apache tetap dapat dimulai meskipun modul tidak tersedia. Ganti atau tambahkan baris ExpiresByType sesuai dengan tipe konten Anda.

Atur TTL cache berdasarkan tipe konten

Gunakan mod_expires untuk aturan max-age yang sederhana, atau mod_headers jika Anda memerlukan kontrol penuh atas Cache-Control.

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On

    # TTL default untuk semua tipe konten
    ExpiresDefault "access plus 1 day"

    # Gambar: cache selama 1 bulan
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png  "access plus 1 month"
    ExpiresByType image/gif  "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
    ExpiresByType image/webp "access plus 1 month"

    # CSS dan JavaScript: cache selama 1 minggu
    ExpiresByType text/css              "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"

    # Font: cache selama 1 tahun
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType font/woff  "access plus 1 year"

    # HTML dan data: jangan cache
    ExpiresByType text/html        "access plus 0 seconds"
    ExpiresByType application/json "access plus 0 seconds"
</IfModule>

Setara mod_headers

<IfModule mod_headers.c>
    # Gambar
    <FilesMatch "\.(jpg|jpeg|png|gif|svg|webp)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    # CSS dan JavaScript
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=604800, public"
    </FilesMatch>

    # Font
    <FilesMatch "\.(woff|woff2)$">
        Header set Cache-Control "max-age=31536000, public, immutable"
    </FilesMatch>

    # HTML dan data: tanpa caching
    <FilesMatch "\.(html|json)$">
        Header set Cache-Control "no-store"
    </FilesMatch>
</IfModule>

Atur TTL default global

Jika sebagian besar konten Anda bersifat statis, atur default global dan sesuaikan jenis tertentu sesuai kebutuhan.

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 week"
</IfModule>

Setara mod_headers

<IfModule mod_headers.c>
    Header set Cache-Control "max-age=604800, public"
</IfModule>

Nonaktifkan caching untuk konten dinamis

Cegah node edge CDN dan browser menyimpan cache respons yang berubah setiap permintaan.

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/html        "access plus 0 seconds"
    ExpiresByType application/json "access plus 0 seconds"
</IfModule>

Setara mod_headers

<IfModule mod_headers.c>
    <FilesMatch "\.(html|json|php)$">
        Header set Cache-Control "no-store"
    </FilesMatch>
</IfModule>

Referensi direktif

Direktif mod_expires

Direktif

Deskripsi

ExpiresActive On

Mengaktifkan pembuatan header Expires untuk blok server atau lokasi

ExpiresDefault "<base> plus <duration>"

Mengatur TTL default untuk semua tipe konten yang tidak sesuai dengan ExpiresByType

ExpiresByType <MIME-type> "<base> plus <duration>"

Mengatur TTL untuk tipe MIME tertentu

Opsi basis waktu:

Nilai

Makna

access / now

TTL dihitung dari waktu permintaan

modification

TTL dihitung dari timestamp terakhir file dimodifikasi

Unit durasi: years, months, weeks, days, hours, minutes, seconds

Nilai durasi umum:

Ekspresi

Ekuivalen

Kasus penggunaan

"access plus 1 year"

31.536.000 detik

Aset versi dengan nama file cache-busting

"access plus 1 month"

2.592.000 detik

Gambar dan aset lain yang jarang diperbarui

"access plus 1 week"

604.800 detik

File CSS dan JavaScript

"access plus 0 seconds"

Tanpa caching

Laman HTML dan respons API

Verifikasi konfigurasi

Setelah memuat ulang Apache, pastikan header tersebut muncul dalam respons:

curl -I https://<your-domain>/path/to/static-file.jpg

Cari Cache-Control atau Expires dalam output:

HTTP/1.1 200 OK
Cache-Control: max-age=2592000, public
Expires: Thu, 10 Jul 2026 04:00:00 GMT

Alternatifnya, buka Chrome DevTools, buka tab Network, muat ulang halaman, lalu klik sumber daya statis. Panel Response Headers menampilkan nilai Cache-Control dan Expires yang ditetapkan oleh konfigurasi Anda.

Praktik terbaik

  • Lebih baik gunakan mod_headers untuk produksi. Modul ini mendukung seluruh rentang direktif Cache-Control (no-store, immutable, stale-while-revalidate) yang tidak dapat dihasilkan oleh mod_expires.

  • Gunakan TTL panjang untuk aset versi. Jika pipeline build Anda menambahkan hash ke nama file (misalnya, app.a1b2c3.js), atur TTL satu tahun atau lebih. Perubahan nama file berfungsi sebagai mekanisme cache-busting.

  • Atur no-store untuk laman HTML dan respons API. Ini memastikan browser dan node edge CDN selalu mengambil struktur halaman dan data terbaru.

  • Muat ulang, jangan restart. Setelah mengedit file konfigurasi, jalankan apachectl graceful (atau systemctl reload apache2 / systemctl reload httpd) untuk menerapkan perubahan tanpa memutus koneksi aktif.

  • Uji dengan curl -I sebelum ke produksi. Verifikasi header pada setiap tipe konten yang Anda konfigurasikan, bukan hanya satu jenis saja.