Apache'de Mod_Expires ile Tarayıcı Önbellekleme: Site Hızınızı ve Sunucu Yükünüzü Azaltın 
Selam sistemciler!
Bugün, sitenizin kullanıcı deneyimini gözle görülür şekilde iyileştirecek, sunucu yükünüzü hafifletecek ve aslında kurulumu birkaç satır config'ten ibaret olan harika bir modülden bahsedeceğiz: mod_expires.
"Tarayıcı önbellekleme" deyince aklınıza ne geliyor? Kullanıcı sizin sitenize ilk kez geldiğinde, logo'nuzu, CSS dosyanızı, JavaScript'lerinizi ve ikonlarınızı indirir. Peki ya aynı kullanıcı 5 dakika sonra tekrar geldiğinde? Eğer doğru yapılandırmadıysanız, tüm bu statik dosyalar tekrar tekrar indirilir. Bu, hem kullanıcı için daha yavaş bir sayfa yüklenmesi (her seferinde tüm dosyalar yeniden çekiliyor), hem de sizin için gereksiz bant genişliği tüketimi ve sunucu yükü demek.
İşte mod_expires tam da burada devreye giriyor. Bu modül, Apache'nin HTTP yanıtlarına Expires ve Cache-Control başlıklarını eklemesini sağlar. Bu başlıklar tarayıcıya şunu söyler: "Al bu dosyayı, şu kadar süre boyunca sakla (önbelleğe al), ve o süre dolana kadar bir daha bana sorma, sakladığın kopyayı kullan."
Mod_expires'un Avantajları Neler?
Adım 1: Modülün Kontrolü ve Etkinleştirilmesi
Öncelikle, modülün yüklü ve etkin olup olmadığını kontrol edelim. Bir terminal açıp şu komutu çalıştıralım:
Eğer `expires_module (shared)` benzeri bir çıktı görürseniz, modül zaten yüklü ve aktif demektir.
Eğer görmezseniz, Debian/Ubuntu tabanlı sistemlerde şu komutlarla yükleyip etkinleştirebilirsiniz:
CentOS/RHEL tabanlı sistemlerde ise genellikle `httpd` paketi ile birlikte gelir. `httpd -M` ile kontrol edebilirsiniz.
Adım 2: Yapılandırma - .htaccess veya VirtualHost
Artık sihirli kısmı yapılandıracağız. İki ana yöntemimiz var: Tek bir site için `.htaccess` dosyası, ya da tüm sunucu veya belirli bir VirtualHost için ana Apache konfigürasyon dosyaları.
Yöntem A: .htaccess Dosyası (Kolay ve Hızlı)
Sitenizin kök dizinindeki `.htaccess` dosyasını açın (yoksa oluşturun) ve aşağıdaki kuralları ekleyin:
Yöntem B: VirtualHost Konfigürasyonu (Tercih Edilen - Daha Performanslı)
`.htaccess` kullanmak Apache'ye ek yük bindirir çünkü her dizin için bu dosyayı kontrol eder. En iyi performans için, VirtualHost konfigürasyonunuzun (`<VirtualHost *:80> ... </VirtualHost>` bloğu) içine aynı direktifleri doğrudan yazın.
Örnek VirtualHost yapılandırması:
Değişiklikleri kaydettikten sonra Apache'yi yeniden başlatmayı unutmayın:
Adım 3: Test Etme ve Doğrulama
Ayarlarınızın çalışıp çalışmadığını test etmek çok kolay.
1. **Tarayıcı Geliştirici Araçları:** Chrome/Firefox'ta sayfanıza sağ tıklayıp "İncele" deyin. "Network" (Ağ) sekmesine gidin ve sayfayı yenileyin (Ctrl+F5 değil, normal F5). İndirilen dosyalardan birine (örneğin bir `.png` veya `.css` dosyasına) tıklayın. Sağdaki panelde "Response Headers" bölümüne bakın. `Cache-Control: max-age=...` ve `Expires: ...` başlıklarını görmelisiniz.
2. **cURL ile Komut Satırından Test:** Terminalde şu komutu çalıştırın:
Çıktıda `Cache-Control` ve `Expires` satırlarını arayın.
Önemli Uyarılar ve İpuçları
İşte bu kadar! Birkaç satır kod ile sitenizin performansına ve sunucunuzun nefes almasına büyük bir katkı yaptınız.
Peki siz mod_expires veya benzeri tarayıcı önbellekleme stratejilerini kullanıyor musunuz? Süreleri nasıl belirliyorsunuz, karşılaştığınız ilginç sorunlar oldu mu? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!
Selam sistemciler!
"Tarayıcı önbellekleme" deyince aklınıza ne geliyor? Kullanıcı sizin sitenize ilk kez geldiğinde, logo'nuzu, CSS dosyanızı, JavaScript'lerinizi ve ikonlarınızı indirir. Peki ya aynı kullanıcı 5 dakika sonra tekrar geldiğinde? Eğer doğru yapılandırmadıysanız, tüm bu statik dosyalar tekrar tekrar indirilir. Bu, hem kullanıcı için daha yavaş bir sayfa yüklenmesi (her seferinde tüm dosyalar yeniden çekiliyor), hem de sizin için gereksiz bant genişliği tüketimi ve sunucu yükü demek.
İşte mod_expires tam da burada devreye giriyor. Bu modül, Apache'nin HTTP yanıtlarına Expires ve Cache-Control başlıklarını eklemesini sağlar. Bu başlıklar tarayıcıya şunu söyler: "Al bu dosyayı, şu kadar süre boyunca sakla (önbelleğe al), ve o süre dolana kadar bir daha bana sorma, sakladığın kopyayı kullan."
Mod_expires'un Avantajları Neler?
- Kullanıcı Tarafında Daha Hızlı Sayfa Yüklenmesi: Önbelleğe alınan dosyalar yerel diskten okunur, ağ üzerinden yeniden indirilmez. Bu, özellikle mobil kullanıcılar ve tekrar ziyaretçiler için muazzam bir hız artışı sağlar.
- Sunucu Yükünde ve Bant Genişliğinde Azalma: Gereksiz istek sayısı düşer. Siteniz ne kadar popülerse, tasarrufunuz o kadar büyük olur. Bu, özellikle trafiği yüksek siteler ve CDN maliyetleri için kritiktir.
- SEO'ya Olumlu Katkı: Sayfa yükleme hızı, Google dahil tüm arama motorları için önemli bir sıralama faktörüdür. Hızlanan siteniz, sıralamalarda da olumlu etki görebilir.
- Kurulumu ve Yapılandırması Basit: Birkaç satır konfigürasyon ile hayata geçirilebilir.
Adım 1: Modülün Kontrolü ve Etkinleştirilmesi
Öncelikle, modülün yüklü ve etkin olup olmadığını kontrol edelim. Bir terminal açıp şu komutu çalıştıralım:
Bash:
sudo apache2ctl -M | grep expires_module
# veya
apachectl -M | grep expires_module
Eğer `expires_module (shared)` benzeri bir çıktı görürseniz, modül zaten yüklü ve aktif demektir.
Eğer görmezseniz, Debian/Ubuntu tabanlı sistemlerde şu komutlarla yükleyip etkinleştirebilirsiniz:
Bash:
sudo a2enmod expires
sudo systemctl restart apache2
CentOS/RHEL tabanlı sistemlerde ise genellikle `httpd` paketi ile birlikte gelir. `httpd -M` ile kontrol edebilirsiniz.
Adım 2: Yapılandırma - .htaccess veya VirtualHost
Artık sihirli kısmı yapılandıracağız. İki ana yöntemimiz var: Tek bir site için `.htaccess` dosyası, ya da tüm sunucu veya belirli bir VirtualHost için ana Apache konfigürasyon dosyaları.
Yöntem A: .htaccess Dosyası (Kolay ve Hızlı)
Sitenizin kök dizinindeki `.htaccess` dosyasını açın (yoksa oluşturun) ve aşağıdaki kuralları ekleyin:
Kod:
# Mod_expires'ı etkinleştir
ExpiresActive On
# Varsayılan önbellekleme süresi: 1 gün (1 yıl yapmak isterseniz "access plus 1 year")
ExpiresDefault "access plus 1 day"
# Görseller için daha uzun süre (1 ay)
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
# CSS ve JavaScript için 1 hafta
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
# PDF, fontlar ve diğer statik dosyalar
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
Yöntem B: VirtualHost Konfigürasyonu (Tercih Edilen - Daha Performanslı)
`.htaccess` kullanmak Apache'ye ek yük bindirir çünkü her dizin için bu dosyayı kontrol eder. En iyi performans için, VirtualHost konfigürasyonunuzun (`<VirtualHost *:80> ... </VirtualHost>` bloğu) içine aynı direktifleri doğrudan yazın.
Örnek VirtualHost yapılandırması:
Kod:
<VirtualHost *:80>
ServerName orneksitem.com
DocumentRoot /var/www/orneksitem
# Mod_expires Konfigürasyonu
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
# ... diğer kurallar
</VirtualHost>
Değişiklikleri kaydettikten sonra Apache'yi yeniden başlatmayı unutmayın:
Bash:
sudo systemctl reload apache2 # veya restart
Adım 3: Test Etme ve Doğrulama
Ayarlarınızın çalışıp çalışmadığını test etmek çok kolay.
1. **Tarayıcı Geliştirici Araçları:** Chrome/Firefox'ta sayfanıza sağ tıklayıp "İncele" deyin. "Network" (Ağ) sekmesine gidin ve sayfayı yenileyin (Ctrl+F5 değil, normal F5). İndirilen dosyalardan birine (örneğin bir `.png` veya `.css` dosyasına) tıklayın. Sağdaki panelde "Response Headers" bölümüne bakın. `Cache-Control: max-age=...` ve `Expires: ...` başlıklarını görmelisiniz.
2. **cURL ile Komut Satırından Test:** Terminalde şu komutu çalıştırın:
Bash:
curl -I https://orneksitem.com/logo.png
Önemli Uyarılar ve İpuçları
- Geliştirme Aşamasında Dikkat! Geliştirme yaparken, tarayıcı önbelleği sizi çıldırtabilir. CSS'de yaptığınız bir değişikliği göremezsiniz. Bu durumda tarayıcınızın geliştirici araçlarındaki "Network" sekmesinde "Disable cache" (Önbelleği devre dışı bırak) kutusunu işaretleyebilir veya sayfayı "Ctrl+Shift+R" (Hard Refresh) ile yenileyebilirsiniz.
- Süreleri Akıllıca Belirleyin. Sık değişen dosyalar (örneğin ana sayfa HTML'niz) için çok uzun süre vermeyin. Statik ve versiyonlanmış dosyalar (örn: `style.v2.css`, `app.5f6g7h.js`) için çok uzun süreler (1 yıl gibi) verebilirsiniz. Bu, "cache busting" olarak bilinen harika bir tekniktir.
- Sunucu Tarafı Önbellekleme ile Karıştırmayın. Bu, sadece tarayıcı (istemci) önbelleğidir. Sunucu tarafında Nginx/Apache önbelleği, OPcache, Redis, CDN önbelleği gibi farklı kavramlar da vardır. Hepsi farklı katmanlarda çalışır.
- Değişiklik yaptıktan sonra Apache konfigürasyon syntax'ını kontrol etmeyi unutmayın: `sudo apache2ctl configtest`
İşte bu kadar! Birkaç satır kod ile sitenizin performansına ve sunucunuzun nefes almasına büyük bir katkı yaptınız.
Peki siz mod_expires veya benzeri tarayıcı önbellekleme stratejilerini kullanıyor musunuz? Süreleri nasıl belirliyorsunuz, karşılaştığınız ilginç sorunlar oldu mu? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!