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.
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 |
| Sintaksis sederhana. Cepat mengatur waktu kedaluwarsa untuk berbagai jenis file. | Fungsionalitas terbatas. Tidak dapat mengatur direktif | Mengatur durasi cache sederhana ( |
| Memberikan kontrol penuh atas header HTTP, mendukung semua direktif | Sintaksisnya lebih kompleks dibandingkan | 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 -Matauhttpd -M. Pastikanheaders_moduledanexpires_moduleada dalam daftar output.Aktifkan modul-modul tersebut:
Untuk Debian/Ubuntu:
sudo a2enmod headers expires sudo systemctl restart apache2Untuk 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 barisLoadModuletidak 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.htaccesspada 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 modulmod_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, sepertiimage/jpegatautext/html.base_time: Waktu dasar untuk caching. Biasanyaaccess(saat pengguna mengakses file) ataumodification(saat file terakhir dimodifikasi).time_unit: Satuan waktu, seperti:secondsminuteshoursdaysweeksmonthsyears
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, sepertiCache-ControlatauExpires.value: Nilai yang akan diatur.
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 -tDebian/Ubuntu:
sudo apache2ctl -t
Jika output menampilkan
Syntax OK, Anda dapat melanjutkan.Terapkan konfigurasi (disarankan menggunakan reload).
Gunakan perintah
reloaduntuk menerapkan konfigurasi baru tanpa memutus koneksi yang sedang berlangsung.CentOS/RHEL/Alibaba Cloud Linux:
sudo systemctl reload httpdDebian/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-agedalamCache-Controlatau headerExpires), browser memuat resource dari cache lokal tanpa menghubungi server. Kode status HTTP biasanya200 (from disk cache)atau200 (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:
Browser mengirim permintaan dengan identifier cache dalam headernya, seperti
If-None-Match(dengan nilaiETagdari respons sebelumnya) atauIf-Modified-Since(dengan tanggalLast-Modifieddari respons sebelumnya).Server membandingkan identifier tersebut dengan versi resource saat ini.
Jika resource tidak berubah, server mengembalikan kode status HTTP
304 Not Modifieddengan badan respons kosong. Browser kemudian tetap menggunakan salinan lokal yang sudah kedaluwarsa.Jika resource telah diperbarui, server mengembalikan kode status HTTP
200 OKbeserta konten resource baru.
Dengan mengonfigurasi Apache, Anda dapat mengontrol header respons HTTP berikut yang terkait dengan kebijakan caching: