Son güncelleme: Nisan 2026 · AnomixLabs Teknik Ekibi
Statik dosya önbellekleme, sunucu maliyetini düşüren, sayfa hızını artıran ve kullanıcı deneyimini iyileştiren en düşük maliyetli optimizasyondur — doğru yapılandırılırsa.
Neden Statik Dosyaları Önbelleğe Almalısınız?
Tipik bir web sayfasında network trafiğinin %60-80'i statik dosyalardan (CSS, JS, görsel, font) oluşur. Bu dosyaların önbelleğe alınması:
- Tekrar ziyaretlerde sayfa yükleme süresi %70-90 azalır
- Sunucu bant genişliği kullanımı düşer
- Lighthouse Performance skoru artar
- Core Web Vitals (özellikle LCP) iyileşir
Cache-Control Header'ları
Temel Nginx statik dosya önbellekleme konfigürasyonu:
# /etc/nginx/sites-available/anomix.conf
server {
listen 443 ssl http2;
server_name anomixlabs.com;
# Statik dosyalar — uzun cache
location /static/ {
alias /var/www/anomix/staticfiles/;
expires 1y;
add_header Cache-Control 'public, max-age=31536000, immutable';
add_header Vary Accept-Encoding;
access_log off;
gzip_static on;
}
# Media dosyaları — kısa cache
location /media/ {
alias /var/www/anomix/media/;
expires 30d;
add_header Cache-Control 'public, max-age=2592000';
access_log off;
}
}
immutable Direktifi: Güçlü Optimizasyon
Cache-Control: immutable direktifi tarayıcıya 'bu dosya hiçbir zaman değişmeyecek, yenileme sırasında bile sorma' der. Bu, soft reload'da (F5) gereksiz kondisyonel istekleri (304 Not Modified) ortadan kaldırır.
Koşul: Immutable yalnızca content hash içeren dosya isimleriyle kullanılmalı. Django ile:
# settings.py
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
# Bu ayar collectstatic sırasında dosyalara hash ekler:
# main.css → main.3a7f9b2c.css
# Böylece içerik değişince URL değişir, cache sorunsuz geçersiz olur
Brotli vs Gzip: Hangisi Daha İyi?
Brotli (Google, 2015), gzip'ten daha iyi sıkıştırma oranı sunar — ancak CPU maliyeti daha yüksek:
- Metin dosyaları (HTML/CSS/JS): Brotli gzip'ten %15-25 daha iyi sıkıştırır
- Statik dosyalar için: Önceden sıkıştırılmış .br dosyası — CPU maliyeti yok
- Dinamik içerik için: gzip daha pratik (daha hızlı encode)
- Tarayıcı desteği: 2026 itibarıyla Brotli %97+ tarayıcı desteği
# Nginx Brotli modülü (nginx-module-brotli)
brotli on;
brotli_comp_level 6; # 1-11 arası, 6 iyi denge
brotli_static on; # önceden sıkıştırılmış .br dosyaları
brotli_types text/plain text/css application/javascript
application/json image/svg+xml;
# Gzip fallback
gzip on;
gzip_static on;
gzip_vary on;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
HTTP/3 (QUIC) ile Nginx
HTTP/3, UDP tabanlı QUIC protokolü kullanarak HTTP/2'nin bazı kısıtlamalarını aşıyor — özellikle paket kaybı olan ağlarda belirgin performans artışı:
# Nginx 1.25+ ile HTTP/3 desteği
server {
listen 443 ssl;
listen 443 quic reuseport; # HTTP/3 için QUIC
http2 on;
ssl_certificate /etc/letsencrypt/live/site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.com/privkey.pem;
# Tarayıcıya HTTP/3 desteğini bildir
add_header Alt-Svc 'h3=":443"; ma=86400';
}
Not: HTTP/3 için Nginx mainline (1.25+) veya Nginx Plus gereklidir. Ubuntu 22.04+ paket deposunda mevcut. Cloudflare CDN arkasında HTTP/3 otomatik aktif olur.
WEBP ve AVIF için Nginx map Direktifi
Modern görsel formatlarını tarayıcı desteğine göre servis etmek için:
# Tarayıcı Accept header'ına göre modern format seç
map $http_accept $img_suffix {
default '';
'~*avif' '.avif';
'~*webp' '.webp';
}
server {
location ~* \.(jpe?g|png)$ {
add_header Vary Accept;
try_files $uri$img_suffix $uri =404;
}
}
Bu konfigürasyonla AVIF destekleyen tarayıcılar .avif, WebP destekleyenler .webp, diğerleri orijinal JPEG/PNG alır. Django collectstatic pipeline'ına AVIF/WebP üretimi eklemek için django-imagekit veya Pillow kullanılabilir.
Django collectstatic ve CI/CD Entegrasyonu
Production deployment sürecinde collectstatic otomatize edilmeli:
# .github/workflows/deploy.yml
- name: Collect static files
run: |
python manage.py collectstatic --noinput
# ManifestStaticFilesStorage hash'leri bu adımda oluşturur
- name: Deploy to server
run: |
rsync -avz staticfiles/ user@server:/var/www/app/staticfiles/
# Nginx yeniden başlatma gerekmez — dosyalar değişti, URL'ler de
WhiteNoise alternatifi: Küçük ve orta ölçekli projelerde django-whitenoise, Nginx olmadan Python sürecinden statik dosya servisi yapar. Compression ve caching otomatik. Nginx konfig karmaşıklığını elimine eder.
# settings.py — WhiteNoise
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware', # SecurityMiddleware'den hemen sonra
...
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
# Bu ayar hem hash'li isimler hem Brotli/gzip sıkıştırma yapar
CDN ile Nginx Cache Entegrasyonu
Cloudflare, AWS CloudFront veya BunnyCDN gibi CDN'ler Nginx'in önüne oturur:
- Origin Pull (Lazy Caching): CDN ilk istekte origin'den çeker, sonra CDN'den servis eder. En yaygın mod.
- Push (Proactive Caching): Deploy sırasında dosyalar CDN'e push edilir. CI/CD ile tam kontrol.
- Cache invalidation: Yeni deploy sonrası CDN cache'ini temizle — Cloudflare'de Zone Purge, CloudFront'ta Create Invalidation.
# Cloudflare cache purge (deploy script'e ekle)
curl -X POST 'https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/purge_cache' \
-H 'Authorization: Bearer {API_TOKEN}' \
-H 'Content-Type: application/json' \
--data '{"purge_everything": true}'
Lighthouse Cache Audit
Lighthouse 'Serve static assets with an efficient cache policy' uyarısı, 1 yıldan kısa cache süresi olan statik dosyaları listeler. Düzeltme: /static/ altındaki tüm dosyalar için max-age=31536000 (1 yıl) + immutable.
Cache busting için ManifestStaticFilesStorage kullanıyorsanız bu Lighthouse uyarısını tamamen geçebilirsiniz.
Özet
Nginx statik cache için temel recipe: ManifestStaticFilesStorage ile hash'li dosya isimleri + Cache-Control max-age=31536000 + immutable. Brotli statik sıkıştırma ile %15-25 ek boyut tasarrufu. HTTP/3 modern Nginx'te yapılandırılabilir. CDN eklenince global dağıtım ve origin yük azalması bonus.
Sıkça Sorulan Sorular
CDN ile Nginx cache çakışırsa ne olur? expand_more
Media dosyalarını da cache etmeli miyim? expand_more
collectstatic CI/CD'ye nasıl entegre edilir? expand_more
Cache invalidation stratejisi nedir? expand_more
WhiteNoise yeterli mi yoksa Nginx statik servis şart mı? expand_more
Nginx'te gzip_static ve brotli_static ne işe yarıyor? expand_more
HTTP/3 aktifleştirmek ne kadar performans artışı sağlıyor? expand_more
Ali Kasımoğlu
Full-stack Geliştirici & AnomixLabs Kurucusu
Python ve Django ekosisteminde uzmanlaşmış bir yazılım geliştirici. Modern web mimarileri, yapay zeka entegrasyonları ve minimalist kullanıcı deneyimleri üzerine odaklanıyor. AnomixLabs çatısı altında, karmaşık problemleri yalın ve etkili dijital çözümlere dönüştürmeyi hedefliyor.