format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightNginx ile Statik Dosya Sunumunu Hızlandırma: Kapsamlı Rehber
- arrow_right1. Gzip veya Brotli Sıkıştırma Aktif Etme
- arrow_rightGzip Yapılandırması
- arrow_rightBrotli Yapılandırması
- arrow_right2. Tarayıcı Önbellekleme (Browser Caching)
- arrow_right3. TCP Optimizasyon Ayarları
- arrow_rightBu Ayarların Anlamı:
- arrow_right4. Open File Cache Yapılandırması
- arrow_rightParametrelerin Açıklaması:
- arrow_right5. Keep-Alive Bağlantıları
- arrow_right6. Connection Limiting ve Rate Limiting
- arrow_rightRate Limiting Kullanım Alanları:
- arrow_right7. SSL/TLS Optimizasyonu
- arrow_right8. CDN Entegrasyonu
- arrow_rightCDN Kullanımının Avantajları:
- arrow_right9. Worker Process ve Connection Ayarları
- arrow_rightÖnerilen Worker Ayar Tablosu:
- arrow_right10. HTTP/2 ve HTTP/3 Protokolleri
- arrow_rightHTTP/2 ve HTTP/3 Avantajları:
- arrow_right11. Proxy Cache Yapılandırması
- arrow_right12. İleri Düzey Performans İpuçları
- arrow_rightAIO (Asynchronous I/O) Kullanımı
- arrow_rightZero Copy Teknolojisi
- arrow_rightSonuç ve Özet
Nginx ile Statik Dosya Sunumunu Hızlandırma: Kapsamlı Rehber
Nginx, dünya genelinde en popüler web sunucularından biri olarak statik dosya sunumunda yüksek performans sağlar. Google'ın 2024 verilerine göre, internet trafiğinin %94'ü Nginx veya Apache tabanlı sunucular üzerinden geçmektedir. Bu rehberde, Nginx ile statik dosya sunumunu hızlandırmanın en etkili yollarını detaylı olarak ele alacağız.
1. Gzip veya Brotli Sıkıştırma Aktif Etme
Statik dosyaların boyutunu önemli ölçüde azaltmak, yükleme sürelerini kısaltmanın en etkili yoludur. Araştırmalara göre, Gzip sıkıştırma metin tabanlı dosyaların boyutunu %70-90 oranında azaltabilir.
Gzip Yapılandırması
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/xml application/xml+rss text/javascript image/svg+xml;
Brotli, Gzip'e göre %15-25 daha iyi sıkıştırma oranları sunar. Brotli kullanmak için nginx'in brotli modülü ile derlenmesi gerekir.
Brotli Yapılandırması
brotli on;
brotli_types text/html text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
brotli_comp_level 6;
brotli_min_length 1024;
2. Tarayıcı Önbellekleme (Browser Caching)
Tarayıcı önbellekleme, ziyaretçilerin aynı dosyaları tekrar tekrar indirmesini önleyerek sunucu yükünü azaltır ve sayfa yükleme sürelerini dramatik şekilde düşürür. Yapılan araştırmalara göre, doğru yapılandırılmış önbellekleme sayfa yükleme sürelerini %50-80 oranında iyileştirebilir.
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
Daha uzun süreli önbellek için CSS ve JavaScript dosyaları için versiyonlama veya hash kullanmanızı öneriyoruz. Bu konuda daha fazla bilgi için sunucu güvenliği ve önbellek stratejileri hakkındaki makalemizi inceleyebilirsiniz.
3. TCP Optimizasyon Ayarları
Nginx'in TCP堆栈 ayarlarını optimize etmek, bağlantı başlatma sürelerini önemli ölçüde iyileştirir.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
Bu Ayarların Anlamı:
- sendfile: İşletim sisteminin dosya aktarımını doğrudan yapmasına izin verir, kullanıcı alanı geçişlerini azaltır
- tcp_nopush: TCP tamponlarının dolmasını bekleyerek paket sayısını optimize eder
- tcp_nodelay: Nagle algoritmasını devre dışı bırakarak düşük gecikme süresi sağlar
4. Open File Cache Yapılandırması
Open file cache, sık erişilen dosyaların meta verilerini bellekte tutarak disk I/O işlemlerini azaltır. Bu optimizasyon, özellikle çok sayıda küçük dosya içeren web sitelerinde etkilidir.
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Parametrelerin Açıklaması:
| Parametre | Değer | Açıklama |
|---|---|---|
| max | 10000 | Önbellekte tutulacak maksimum dosya sayısı |
| inactive | 30s | Erişilmez dosyaların önbellekte kalma süresi |
| valid | 60s | Cache bilgisinin yeniden doğrulanma süresi |
| min_uses | 2 | Önbelleğe alınması için minimum kullanım sayısı |
5. Keep-Alive Bağlantıları
HTTP Keep-Alive, aynı TCP bağlantısı üzerinden birden fazla istek gönderilmesine olanak tanıyarak bağlantı kurulum overhead'ını azaltır. Bu sayede her istek için yeniden el sıkışma yapılması gerekmez.
keepalive_timeout 65;
keepalive_requests 100;
upstream backend {
server 127.0.0.1:8080;
keepalive 32;
}
6. Connection Limiting ve Rate Limiting
Sunucuyu aşırı yüklenmeden korumak ve kaynakları adil dağıtmak için bağlantı ve istek sınırlamaları kullanılmalıdır.
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
limit_req zone=req_limit burst=20 nodelay;
limit_conn conn_limit 50;
}
Rate Limiting Kullanım Alanları:
- API endpoint'lerini koruma
- Brute force saldırılarını engelleme
- Kaynak kullanımını dengeleme
- Bandwidth aşımını önleme
7. SSL/TLS Optimizasyonu
HTTPS kullanımı zorunlu hale geldiğinden, SSL/TLS performansını optimize etmek kritik önem kazanır. SSL oturum önbelleği ve uygun şifre paketleri kullanımı performansı artırır.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
SSL sertifikası yenileme süreçlerini otomatikleştirmek için Certbot ile SSL otomatik yenileme rehberimizi inceleyebilirsiniz.
8. CDN Entegrasyonu
İçerik Dağıtım Ağı (CDN), statik dosyalarınızı dünya genelindeki edge sunucularından sunarak gecikme sürelerini önemli ölçüde azaltır. CDN kullanımı sayesinde kullanıcılar dosyaları en yakın sunucudan indirir.
CDN Kullanımının Avantajları:
- Coğrafi olarak dağıtılmış sunucular ile düşük gecikme süresi
- Sunucu yükünün azaltılması
- Bandwidth maliyetlerinin düşürülmesi
- DDoS koruması sağlanması
- Kesintisiz içerik dağıtımı
CDN entegrasyonu ile birlikte bulut sunucularda snapshot ve backup farkları konusunda da bilgi edinmenizi öneririz.
9. Worker Process ve Connection Ayarları
Nginx worker process yapılandırması, sunucu performansını doğrudan etkiler. İşlemci çekirdek sayısına göre optimal ayar yapılmalıdır.
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
Önerilen Worker Ayar Tablosu:
| Sunucu Özelliği | Önerilen Değer | Açıklama |
|---|---|---|
| worker_processes | auto | CPU çekirdek sayısına göre otomatik |
| worker_connections | 4096-8192 | Her worker'ın eşzamanlı bağlantı sayısı |
| worker_rlimit_nofile | 65535 | Açık dosya tanımlayıcı limiti |
10. HTTP/2 ve HTTP/3 Protokolleri
HTTP/2 ve HTTP/3, eski HTTP/1.1'e göre önemli performans iyileştirmeleri sunar. Çoklu stream desteği, header sıkıştırması ve multiplexing sayesinde sayfa yükleme süreleri %30-50 oranında azalır.
server {
listen 443 ssl http2;
listen 443 ssl http3;
http3 on;
}
HTTP/2 ve HTTP/3 Avantajları:
- Multiplexing: Tek bağlantı üzerinden paralel istekler
- Header Compression: HPACK ve QPACK sıkıştırma
- Server Push:İstemci istemeden kaynak gönderme
- QUIC (HTTP/3):UDP tabanlı, daha düşük gecikme süresi
11. Proxy Cache Yapılandırması
Proxy cache kullanarak arka uç sunucu yükünü azaltabilir ve yanıt sürelerini iyileştirebilirsiniz.
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:10m max_size=1g inactive=60m use_temp_path=off;
location / {
proxy_cache static_cache;
proxy_cache_valid 200 60m;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://backend;
}
12. İleri Düzey Performans İpuçları
AIO (Asynchronous I/O) Kullanımı
Linux'ta aio modülü ile büyük dosyaların asenkron olarak okunması sağlanabilir:
location /files/ {
aio on;
directio 512;
output_buffers 1 128k;
}
Zero Copy Teknolojisi
sendfile ile zero-copy aktarım kullanarak CPU kullanımını minimize edebilirsiniz:
location /static/ {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
Sonuç ve Özet
Nginx ile statik dosya sunumunu hızlandırmak için yukarıdaki yöntemleri uygulayarak önemli performans kazanımları elde edebilirsiniz. En etkili optimizasyonlar sırasıyla:
- Gzip/Brotli Sıkıştırma: %70-90 dosya boyutu azaltımı
- Tarayıcı Önbellekleme: Tekrar ziyaretlerde %50-80 hızlanma
- CDN Entegrasyonu: Coğrafi gecikmeyi minimize etme
- HTTP/2/HTTP/3: %30-50 daha hızlı yükleme
- TCP Optimizasyonları: Düşük gecikme süresi
Bu optimizasyonları uygularken sunucu kaynaklarınızı ve trafiğinizi gözlemlemeyi unutmayın. VDS sunucularda htop ve iotop kullanımı hakkındaki makalemiz, sunucu performansını izlemek için faydalı bilgiler içermektedir.
Doğru yapılandırma ile Nginx, statik dosya sunumunda saniyeler altı yanıt süreleri elde edebilir ve kullanıcı deneyimini önemli ölçüde iyileştirebilirsiniz.