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.
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 |
| Sintaksis sederhana. Cepat menetapkan waktu kedaluwarsa untuk berbagai jenis file. | Fungsionalitas terbatas. Tidak dapat menetapkan | Menetapkan |
| Memberikan kontrol penuh atas header HTTP, mendukung semua | Sintaksisnya lebih kompleks daripada | 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 -Matauhttpd -M. Verifikasi bahwaheaders_moduledanexpires_moduleada dalam daftar output.Aktifkan modul:
Untuk Debian/Ubuntu:
sudo a2enmod headers expires sudo systemctl restart apache2Untuk 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 barisLoadModuletidak 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.htaccesspada 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 modulmod_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, sepertiimage/jpeg,image/gif,text/css, atautext/html.base_time: Waktu dasar untuk caching. Biasanyaaccess(ketika pengguna mengakses file) ataumodification(ketika file terakhir dimodifikasi).time_unit: Unit waktu, seperti:secondsminuteshoursdaysweeksmonthsyears
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, sepertiCache-ControlatauExpires.value: Nilai yang akan ditetapkan.
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 -tDebian/Ubuntu:
sudo apache2ctl -t
Jika outputnya adalah
Syntax OK, Anda dapat melanjutkan.Terapkan konfigurasi (muat ulang yang mulus direkomendasikan).
Gunakan perintah
reloaduntuk menerapkan konfigurasi baru tanpa menjatuhkan koneksi yang ada.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: 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-agediCache-Controlatau headerExpires), browser memuat sumber daya dari cache lokal tanpa menghubungi server. Kode status HTTP biasanya200 (from disk cache)atau200 (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:
Browser mengirimkan permintaan dengan pengenal cache di headernya, seperti
If-None-Match(dengan nilaiETagdari respons sebelumnya) atauIf-Modified-Since(dengan tanggalLast-Modifieddari respons sebelumnya).Server membandingkan pengenal ini dengan versi saat ini dari sumber daya.
Jika sumber daya tidak berubah, server mengembalikan kode status HTTP
304 Not Modifieddengan badan respons kosong. Browser kemudian terus menggunakan salinan lokalnya yang basi.Jika sumber daya telah diperbarui, server mengembalikan kode status HTTP
200 OKbersama dengan konten sumber daya baru.
Dengan mengonfigurasi Apache, Anda dapat mengontrol header respons HTTP berikut yang terkait dengan cache untuk menerapkan kebijakan caching Anda: