All Products
Search
Document Center

CDN:Konfigurasikan kebijakan caching Apache

Last Updated:Sep 04, 2026

Mengonfigurasi kebijakan web caching di Apache memungkinkan browser dan proxy perantara, seperti Content Delivery Network (CDN), menggunakan kembali resource yang telah diunduh sehingga mengurangi permintaan jaringan yang tidak perlu. Hal ini meningkatkan kecepatan pemuatan halaman sekaligus mengurangi beban server dan konsumsi bandwidth.

Catatan

Disclaimer: Topik ini mungkin berisi informasi mengenai produk pihak ketiga. Alibaba Cloud tidak memberikan pernyataan atau jaminan apa pun mengenai kinerja atau keandalan produk pihak ketiga tersebut. Anda bertanggung jawab atas segala dampak potensial akibat penggunaan produk-produk tersebut.

Pilih modul Apache

Modul Apache

Kelebihan

Kekurangan

Use Cases

mod_expires

Sintaksis sederhana. Cepat mengatur waktu kedaluwarsa untuk berbagai jenis file.

Fungsionalitas terbatas. Tidak dapat mengatur direktif Cache-Control seperti no-store atau immutable.

Mengatur durasi cache sederhana (max-age) yang memberi tahu browser atau CDN berapa lama file boleh digunakan kembali.

mod_headers

Memberikan kontrol penuh atas header HTTP, mendukung semua direktif Cache-Control, seperti immutable.

Sintaksisnya lebih kompleks dibandingkan mod_expires.

Lingkungan produksi yang memerlukan strategi caching detail halus dan komprehensif.

Prosedur

Aktifkan modul-modul tersebut

Sebelum mengonfigurasi kebijakan caching, pastikan modul headers dan expires telah diaktifkan di Apache.

  • Untuk memeriksa apakah modul telah dimuat, jalankan perintah apachectl -M atau httpd -M. Pastikan headers_module dan expires_module ada dalam daftar output.

  • Aktifkan modul-modul tersebut:

    • Untuk Debian/Ubuntu:

      sudo a2enmod headers expires
      sudo systemctl restart apache2
    • Untuk CentOS/RHEL/Alibaba Cloud Linux: Modul-modul ini biasanya telah dikompilasi atau dimuat secara default. Jika tidak tersedia, periksa file konfigurasi di direktori /etc/httpd/conf.modules.d/. Pastikan baris LoadModule tidak dikomentari.

Pilih lokasi file konfigurasi

Anda dapat menyimpan konfigurasi cache dalam satu file atau dalam blok VirtualHost situs Anda.

  • Direkomendasikan: Buat file baru, seperti cache.conf, di direktori /etc/httpd/conf.d/ untuk CentOS/RHEL atau direktori /etc/apache2/conf-available/ untuk Debian/Ubuntu.

  • Tidak direkomendasikan: Hindari membuat konfigurasi di file .htaccess. Karena Apache harus membaca dan mengurai .htaccess pada setiap permintaan, hal ini menyebabkan overhead performa yang tidak perlu.

Contoh konfigurasi

Atur waktu kedaluwarsa cache global default

mod_expires

<IfModule mod_expires.c>
    # Aktifkan fitur mod_expires
    ExpiresActive On
    # Atur waktu cache default untuk semua resource menjadi 1 hari
    ExpiresDefault "access plus 1 day"
</IfModule>

mod_headers

<IfModule mod_headers.c>
    # Atur header Cache-Control. Waktu cache adalah 1 hari
    Header set Cache-Control "max-age=86400, public"
</IfModule>

Atur kebijakan caching berdasarkan jenis file

mod_expires

<IfModule mod_expires.c>
    # Aktifkan fitur mod_expires
    ExpiresActive On

    # Atur waktu cache default menjadi 1 hari
    ExpiresDefault "access plus 1 day"

    # Cache resource gambar 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"

    # Cache file CSS dan JS selama 1 minggu
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"

    
</IfModule>

mod_headers

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

    # Cache file CSS dan JS selama 1 minggu
    <FilesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=604800, public"
    </FilesMatch>
</IfModule>

Nonaktifkan caching untuk jenis resource tertentu

mod_expires

<IfModule mod_expires.c>
    # Aktifkan fitur mod_expires
    ExpiresActive On
    # Jangan cache file HTML
    ExpiresByType text/html "access plus 0 seconds"
</IfModule>

mod_headers

<IfModule mod_headers.c>
    #  Nonaktifkan caching untuk file HTML
    <FilesMatch "\.html$">
        Header set Cache-Control "no-store, no-cache, must-revalidate"
        Header set Pragma "no-cache"
        Header set Expires "0"
    </FilesMatch>
</IfModule>

Atur kebijakan caching kustom

Kustomisasi kebijakan menggunakan aturan sintaksis berikut dari mod_expires dan mod_headers:

mod_expires

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "base_time plus time_unit"
    ExpiresByType mime_type "base_time plus time_unit"
</IfModule>
  • ExpiresActive On: Mengaktifkan modul mod_expires.

  • ExpiresDefault: Mengatur waktu cache default untuk semua resource yang tidak memiliki tipe yang didefinisikan.

  • ExpiresByType: Mengatur waktu cache untuk tipe Multipurpose Internet Mail Extensions (MIME) tertentu.

  • mime_type: Menjelaskan format file. Terdiri atas tipe utama dan subtipe, dipisahkan oleh garis miring, seperti image/jpeg atau text/html.

  • base_time: Waktu dasar untuk caching. Biasanya access (saat pengguna mengakses file) atau modification (saat file terakhir dimodifikasi).

  • time_unit: Satuan waktu, seperti:

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

mod_headers

<IfModule mod_headers.c>
    Header set|append|unset header_name "value"
</IfModule>
  • Header set: Mengatur nilai bidang header HTTP yang ditentukan.

  • Header append: Menambahkan konten ke nilai yang sudah ada.

  • Header unset: Menghapus bidang header HTTP yang ditentukan.

  • header_name: Nama bidang header HTTP yang akan dioperasikan, seperti Cache-Control atau Expires.

  • value: Nilai yang akan diatur.

Pengenalan <FilesMatch>

Direktif <FilesMatch> mencocokkan nama file atau path menggunakan ekspresi reguler. Hal ini memungkinkan Anda menerapkan aturan konfigurasi spesifik pada file yang sesuai. Contohnya:

  • Atur waktu cache panjang untuk file gambar seperti .jpg atau .png.

  • Cegah akses ke file sensitif seperti .htaccess atau .log.

  • Tambahkan header HTTP spesifik untuk resource statis seperti file CSS dan JS.

Sintaksis dasar <FilesMatch>:

<FilesMatch "regular_expression"> </FilesMatch>
  • regular_expression: Digunakan untuk mencocokkan nama file atau path. Pola pencocokan umum:

    • \.(extension)$: Mencocokkan file dengan ekstensi tertentu. Misalnya, \.(jpg|jpeg|png)$ mencocokkan semua file .jpg, .jpeg, dan .png.

    • ^/path/: Mencocokkan file dalam path tertentu.

    • .*: Mencocokkan nama file apa pun.

Validasi dan terapkan konfigurasi

Setelah memodifikasi konfigurasi, periksa sintaksis lalu muat ulang layanan secara graceful untuk menghindari gangguan layanan.

  • Periksa sintaksis konfigurasi. Sebelum menerapkan perubahan, jalankan perintah pemeriksaan sintaksis untuk memastikan tidak ada kesalahan.

    • CentOS/RHEL/Alibaba Cloud Linux: sudo httpd -t

    • Debian/Ubuntu: sudo apache2ctl -t

    Jika output menampilkan Syntax OK, Anda dapat melanjutkan.

  • Terapkan konfigurasi (disarankan menggunakan reload).

    Gunakan perintah reload untuk menerapkan konfigurasi baru tanpa memutus koneksi yang sedang berlangsung.

    • CentOS/RHEL/Alibaba Cloud Linux: sudo systemctl reload httpd

    • Debian/Ubuntu: sudo systemctl reload apache2

Referensi: Cara kerja web caching

Memahami web caching membantu Anda mengonfigurasi Apache dengan benar. Web caching dibagi menjadi dua jenis utama: strong caching dan negotiated caching:

  • Strong caching: Saat browser meminta resource, browser terlebih dahulu memeriksa cache lokalnya. Jika cache belum kedaluwarsa (ditentukan oleh direktif max-age dalam Cache-Control atau header Expires), browser memuat resource dari cache lokal tanpa menghubungi server. Kode status HTTP biasanya 200 (from disk cache) atau 200 (from memory cache). Ini adalah metode caching paling efisien.

  • Negotiated caching: Saat strong cache tidak valid (kedaluwarsa) atau tidak diatur, browser mengirim permintaan kondisional ke server untuk memeriksa apakah versi cache-nya masih valid. Proses ini melibatkan langkah-langkah berikut:

    1. Browser mengirim permintaan dengan identifier cache dalam headernya, seperti If-None-Match (dengan nilai ETag dari respons sebelumnya) atau If-Modified-Since (dengan tanggal Last-Modified dari respons sebelumnya).

    2. Server membandingkan identifier tersebut dengan versi resource saat ini.

    3. Jika resource tidak berubah, server mengembalikan kode status HTTP 304 Not Modified dengan badan respons kosong. Browser kemudian tetap menggunakan salinan lokal yang sudah kedaluwarsa.

    4. Jika resource telah diperbarui, server mengembalikan kode status HTTP 200 OK beserta konten resource baru.

Dengan mengonfigurasi Apache, Anda dapat mengontrol header respons HTTP berikut yang terkait dengan kebijakan caching:

Header respons HTTP terkait caching

Header respons

Deskripsi

Direktif/nilai umum

Cache-Control

Diperkenalkan dalam HTTP/1.1 untuk memberikan kontrol detail halus atas perilaku caching. Memiliki prioritas lebih tinggi daripada Expires.

public: Dapat disimpan oleh cache apa pun (browser, CDN).

private: Hanya dapat di-cache oleh browser pengguna akhir.

no-cache: Memaksa negotiated caching. Harus divalidasi dengan server setiap kali.

no-store: Menonaktifkan caching sepenuhnya. Tidak menyimpan salinan apa pun.

max-age=<seconds>: Mengatur periode validitas untuk strong caching dalam satuan detik.

s-maxage=<seconds>: max-age khusus untuk cache bersama, seperti CDN.

must-revalidate: Setelah cache kedaluwarsa, harus divalidasi dengan server origin. Salinan kedaluwarsa tidak boleh digunakan.

immutable: Menunjukkan bahwa badan respons tidak akan berubah selama cache masih fresh. Hal ini memungkinkan browser melewati pengiriman permintaan kondisional.

Expires

Standar HTTP/1.0 lama yang memberikan timestamp kedaluwarsa absolut. Header ini diabaikan jika Cache-Control: max-age ada.

Expires: Wed, 21 Oct 2025 07:28:00 GMT

ETag

Entity tag (ETag) adalah identifier unik yang dihasilkan server untuk suatu resource, seperti hash dari konten file. ETag lebih akurat daripada Last-Modified.

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Last-Modified

Waktu resource terakhir dimodifikasi di server. Presisinya lebih rendah (tingkat detik) dan bisa tidak akurat dalam beberapa skenario, seperti saat metadata file berubah tetapi kontennya tidak.

Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT