全部产品
Search
文档中心

:Konfigurasikan kebijakan cache Apache

更新时间:Sep 13, 2025

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

Catatan

Penafian: Topik ini mungkin berisi informasi tentang produk pihak ketiga. Informasi ini hanya untuk referensi. Alibaba Cloud tidak memberikan pernyataan atau jaminan apa pun terkait kinerja atau keandalan produk pihak ketiga. Anda bertanggung jawab atas dampak potensial dari penggunaan produk-produk tersebut.

Pilih modul Apache

Modul Apache

Kelebihan

Kekurangan

Kasus Penggunaan

mod_expires

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

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

Menetapkan max-age.

mod_headers

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

Sintaksisnya lebih kompleks daripada mod_expires.

Lingkungan produksi yang memerlukan strategi caching yang detail halus dan komprehensif.

Prosedur

Aktifkan modul

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

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

  • Aktifkan modul:

    • Untuk Debian/Ubuntu:

      sudo a2enmod headers expires
      sudo systemctl restart apache2
    • Untuk CentOS/RHEL/Alibaba Cloud Linux: Modul ini biasanya dikompilasi atau dimuat secara default. Jika tidak ada, 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 di blok VirtualHost situs Anda.

  • Disarankan: 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 disarankan: Hindari membuat konfigurasi di file .htaccess. Karena Apache harus membaca dan mengurai .htaccess pada setiap permintaan, hal ini menyebabkan overhead kinerja yang tidak perlu.

Contoh konfigurasi

Tetapkan waktu kedaluwarsa cache default global

mod_expires

<IfModule mod_expires.c>
    # Aktifkan fitur mod_expires
    ExpiresActive On
    # Tetapkan waktu cache default untuk semua sumber daya menjadi 1 minggu
    ExpiresDefault "access plus 1 week"
</IfModule>

mod_headers

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

Tetapkan kebijakan cache berdasarkan tipe file

mod_expires

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

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

    # Cache sumber daya 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 sumber daya 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 sumber daya 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>

Tetapkan kebijakan cache kustom

Kustomisasi kebijakan menggunakan aturan sintaksis berikut dari mod_expires dan mod_headers:

Sintaksis dasar 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: Menetapkan waktu cache default untuk semua sumber daya yang tidak memiliki tipe yang didefinisikan.

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

  • mime_type: Jenis MIME, seperti image/jpeg, image/gif, text/css, atau text/html.

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

  • time_unit: Unit waktu, seperti:

    • seconds

    • minutes

    • hours

    • days

    • weeks

    • months

    • years

Sintaksis dasar mod_headers

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

  • Header append: Menambahkan konten ke nilai yang 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 ditetapkan.

Pengantar <FilesMatch>

Direktif <FilesMatch> mencocokkan nama file atau jalur menggunakan ekspresi reguler. Ini memungkinkan Anda menerapkan aturan konfigurasi tertentu pada file yang cocok. Contohnya:

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

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

  • Tambahkan header HTTP tertentu untuk sumber daya statis seperti file CSS dan JS.

Sintaksis dasar <FilesMatch> :

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

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

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

    • .*: Mencocokkan nama file apa saja.

Validasi dan terapkan konfigurasi

Setelah memodifikasi konfigurasi, periksa sintaksis lalu muat ulang layanan dengan cara yang mulus 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 outputnya adalah Syntax OK, Anda dapat melanjutkan.

  • Terapkan konfigurasi (muat ulang yang mulus direkomendasikan).

    Gunakan perintah reload untuk menerapkan konfigurasi baru tanpa menjatuhkan koneksi yang ada.

    • 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: caching kuat dan caching negosiasi:

  • Caching kuat: Ketika browser meminta sumber daya, ia pertama-tama memeriksa cache lokalnya. Jika cache belum kedaluwarsa (ditentukan oleh direktif max-age di Cache-Control atau header Expires), browser memuat sumber daya 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.

  • Caching negosiasi: Ketika cache kuat tidak valid (kedaluwarsa) atau tidak disetel, browser mengirimkan permintaan bersyarat ke server untuk memeriksa apakah versi cache-nya masih valid. Proses ini melibatkan langkah-langkah berikut:

    1. Browser mengirimkan permintaan dengan pengenal cache di 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 pengenal ini dengan versi saat ini dari sumber daya.

    3. Jika sumber daya tidak berubah, server mengembalikan kode status HTTP 304 Not Modified dengan badan respons kosong. Browser kemudian terus menggunakan salinan lokalnya yang basi.

    4. Jika sumber daya telah diperbarui, server mengembalikan kode status HTTP 200 OK bersama dengan konten sumber daya baru.

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

Header respons HTTP terkait cache

Header respons

Deskripsi

Direktif/nilai umum

Cache-Control

Diperkenalkan di HTTP/1.1 untuk memberikan kontrol detail halus atas perilaku caching. Ini memiliki prioritas lebih tinggi daripada Expires.

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

private: Hanya dapat dicache oleh browser pengguna akhir.

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

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

max-age=<seconds>: Menetapkan periode validitas untuk caching kuat dalam detik.

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

must-revalidate: Setelah cache kedaluwarsa, itu harus divalidasi dengan server asal. Salinan basi tidak dapat digunakan.

immutable: Menunjukkan bahwa badan respons tidak akan berubah selama cache masih segar. Ini memungkinkan browser melewati pengiriman permintaan bersyarat.

Expires

Standar HTTP/1.0 yang lebih 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

Tag entitas (ETag) adalah pengenal unik yang dihasilkan oleh server untuk sumber daya, seperti hash dari konten file. ETag lebih akurat daripada Last-Modified.

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"

Last-Modified

Waktu ketika sumber daya terakhir dimodifikasi di server. Ini kurang presisi (presisi level detik) dan bisa tidak akurat dalam beberapa skenario, seperti ketika metadata file berubah tetapi kontennya tidak.

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