Sunucuda Büyük Dosya Yüklemeleri Yönetimi
Sunucuda Büyük Dosya Yüklemeleri Yönetimi: Chunked, Resumable ve Doğrudan Object Storage Yöntemleri
Son Güncelleme: Mayıs 2026
Giriş: Bu makalede hosting, VPS veya bulut sunucu üzerinde karşılaşılan büyük dosya yüklemeleri (ör. video, disk görüntüsü, yedekleme arşivleri) problemlerini; Nginx, PHP, reverse proxy ve doğrudan object storage (S3 uyumlu) yaklaşımlarıyla nasıl çözeceğinizi açıklayacağız. Ayrıca chunked (parçalı), resumable (devam ettirilebilir) ve doğrudan tarayıcıdan S3 yüklemeleri için pratik konfigürasyonlar ve örnekler sunacağız.
İçindekiler
- Neden Büyük Dosya Yüklemelerde Problem Olur?
- Temel Sunucu ve PHP Ayarları
- Chunked (Parçalı) ve Resumable Yüklemeler
- Doğrudan Tarayıcıdan S3/Object Storage Yüklemeleri
- Yöntem Karşılaştırma Tablosu
- Pratik Uygulama Senaryoları ve Örnekler
- Sıkça Sorulan Sorular
- Sonuç
Neden Büyük Dosya Yüklemelerde Problem Olur?
Büyük dosya yüklemelerinde karşılaşılan yaygın sorunlar genellikle şu nedenlerden kaynaklanır:
- Sunucu kaynakları: Yetersiz RAM, disk I/O veya CPU yükleri sebebiyle bağlantılar zaman aşımına uğrar.
- HTTP zaman aşımı: Reverse proxy veya uygulama sunucusu tarafında düşük
timeoutdeğerleri vardır. - PHP/CGI limitleri:
post_max_size,upload_max_filesizeveyamax_execution_timesınırlıdır. - Ağ sorunları: İnterrupt (incoming) ve outgoing bağlantıların kararsızlığı nedeniyle tek seferlik büyük transferler başarısız olur.
- Tarayıcı/İstemci sınırları: Mobil veya zayıf ağlarda uzun süreli tek parçalı yüklemeler pratik değildir.
Temel Sunucu ve PHP Ayarları
Sunucu (Nginx / Apache) Temel Ayarları
Sunucunuzun HTTP katmanında birkaç ayar büyük fark yaratır. Aşağıda hem Nginx hem de Apache için en önemli parametreler ve örnekler bulunmaktadır.
Nginx Örnek Konfigürasyonu
server {
listen 80;
server_name example.com;
client_max_body_size 10G;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
# Proxy buffering kapatmak büyük upload'larda yardımcı olur
proxy_buffering off;
location /upload/ {
proxy_pass http://127.0.0.1:8080;
proxy_request_buffering off; # önemli: yüklemeyi doğrudan backend'e iletir
}
}
Açıklama: client_max_body_size doğrudan büyük yüklemelerin reddedilmesini engeller. proxy_request_buffering off ile Nginx istemciden gelen veriyi tamponlamadan backend'e iletir; bu, disk/ram kullanımını kontrol etmenizi gerektirir.
PHP / PHP-FPM Örnek Ayarları (php.ini)
upload_max_filesize = 5G
post_max_size = 5G
memory_limit = 6G
max_execution_time = 3600
max_input_time = 3600
Not: PHP süreçleri RAM tüketir; bu yüzden PHP-FPM pool ayarlarıyla birlikte pm.max_children değerlerini planlayın. Çok yüksek memory_limit bellek tüketimini artırabilir.
Reverse Proxy ve Timeout Yönetimi
- Proxy Timeout: Hem Nginx hem de uygulama sunucusunda uygun
timeoutdeğerleri ayarlayın. - Buffering: Büyük dosya yüklemelerinde buffering kapatmak çoğu zaman tercih edilir, ancak disk tabanlı buffering gerektiğinde temp klasörleri için hızlı disk (NVMe) kullanın.
Chunked (Parçalı) ve Resumable Yüklemeler
Chunked yaklaşımı, büyük dosyayı küçük parçalara bölerek (ör. 5-10MB) arka arkaya göndermeyi sağlar. Bu yöntem bağlant kesilmeleri durumunda sadece kaybedilen parça yeniden gönderildiği için güvenilirdir.
Resumable Protokoller ve Kütüphaneler
- TUS: Devam ettirilebilir yüklemeler için açık protokol. Sunucu tarafında
tusdveya kütüphaneler kullanılır. - Resumable.js: Tarayıcı tarafı için popüler bir JavaScript kütüphanesi.
- Multipart Upload: Objekt depolama (S3) için kullanılan multipart yöntemi (doğrudan S3'e yükleme ile birlikte kullanılır).
Basit Chunked Yükleme Sunucu Mantığı (Özet)
- Kimliklendirme: Her yükleme için benzersiz bir ID oluşturun.
- Parça takibi: Gönderilen parçaların index'ini ve durumunu bir veritabanı veya metadata dosyasında saklayın.
- Birleştirme: Tüm parçalar geldikten sonra final birleşimini başlatın (örn. filesystem birleştirme veya server-side stream ile yazma).
Örnek: Resumable Upload ile curl Testi
# Parçayı upload et (örnek):
curl -X POST "https://example.com/upload?uploadId=abc123&part=5" \
-H "Authorization: Bearer TOKEN" \
--data-binary @part5.bin
Doğrudan Tarayıcıdan S3/Object Storage Yüklemeleri
Doğrudan tarayıcıdan S3 (veya S3 uyumlu object storage) yüklemeleri, uygulama sunucusunu bypass ederek sunucu yükünü ve bant genişliği maliyetini azaltır. Bu yöntem güvenlik olarak presigned URL veya temporary credentials ile sağlanır.
Avantajlar
- Sunucu yükü azaltılır: Dosya verisi uygulama sunucusuna uğramaz.
- Performans: S3 CDN entegrasyonları ile indirme/erişim hızlanır.
- Parçalı yükleme: S3 multipart upload ile çok büyük dosyalar güvenle gönderilebilir.
Presigned URL Akışı (Özet)
- İstemci isteği: İstemci uygulama sunucusundan presigned URL ister.
- Sunucu üretir: Sunucu, storage API'si ile sınırlı süreli presigned URL üretir ve döner.
- İstemci yükleme yapar: Tarayıcı bu URL'e doğrudan PUT veya multipart gönderir.
Güvenlik Notları
- TTL (zaman-aşımı): Presigned URL'lerin süresini kısa tutun.
- İzinler: Yalnızca gerekli yetkileri verin (ör. sadece PUT izni).
- SSL: Tüm iletişim TLS üzerinden yapılmalıdır; Corelux SSL Sertifikası hizmetleri bu noktada yardımcı olabilir.
Yöntem Karşılaştırma Tablosu
| Yöntem | Avantajlar | Dezavantajlar | Önerilen Kullanım |
|---|---|---|---|
| Tek Parçalı Upload (Direct) | Basit, kolay uygulama | Bağlant kopmalarında başarısız, sunucu yükü yüksek | Küçük dosyalar <100MB |
| Chunked / Resumable (tus, resumable.js) | Güvenilir, düşük tekrar maliyeti | Uygulama tarafında ek logic ve metadata yönetimi gerekir | Büyük dosyalar (100MB+), mobil ağlar |
| Doğrudan S3 Multipart | Sunucu bant genişliği tasarrufu, ölçeklenebilir | Storage tarafı maliyet/konfigürasyon gerektirir | 500MB+ ve çok yüksek trafik |
| Proxy ile Stream (proxy_request_buffering off) | Uygulama sunucusuna doğrudan stream | Backend yeterince güçlü değilse sorunlu | Orta boyutlu dosyalar ve kontrollü ortamlarda |
Pratik Uygulama Senaryoları ve Örnekler
Senaryo 1: Video paylaşım platformu (yüksek trafik)
- Öneri: Tarayıcıdan presigned S3 multipart upload + backend metadata yönetimi.
- Neden: Sunucu bant genişliği tasarrufu ve S3 üzerinde dağıtılmış depolama.
- Corelux hizmet: Bu senaryoda performans için Bulut Sunucu veya Türkiye VPS kullanılabilir.
Senaryo 2: Kurumsal yedekleme yüklemeleri (büyük arşivler)
- Öneri: Chunked upload + aracı sunucu üzerinde streaming ile disk'e yazma veya doğrudan object storage.
- Yedekleme: Yedekler için Corelux Yedekleme Hizmeti entegrasyonu düşünün.
Senaryo 3: Dosya yüklemeleri için düşük maliyetli çözüm
- Öneri: Orta boy dosyalar için Nginx proxy ile
proxy_request_buffering offve PHP-FPM yerine bir streaming microservice kullanın.
Sıkça Sorulan Sorular
Büyük dosya yüklemelerinde en önemli Nginx ayarı hangisidir?
En kritik ayar client_max_body_size'dır. Bunun yanı sıra proxy_request_buffering off ve proxy timeout değerleri büyük dosya yüklemelerinde önemli rol oynar.
PHP ile 5GB üzerinde dosya nasıl yüklenir?
PHP ile bu boyutları desteklemek mümkün ancak kaynak maliyeti yüksektir. upload_max_filesize, post_max_size, max_execution_time ve memory_limit değerlerini artırmanız gerekir. Genelde daha verimli yöntem S3 multipart veya chunked upload kullanmaktır.
Chunked upload yaparken parçaları nasıl doğrularım?
Her parçaya bir checksum (ör. MD5 veya SHA256) ekleyin ve sunucu tarafında her parçayı aldıktan sonra checksum kontrolü yapın. Parça numarası ve toplam parça bilgisi metadata olarak saklanmalıdır.
Doğrudan S3 upload güvenli midir?
Evet, presigned URL veya temporary credentials kullanıldığında güvenlidir. Ancak TTL'yi kısa tutun ve sadece gerekli izinleri verin. Tüm trafiğin TLS üzerinden gitmesine dikkat edin.
Sunucu disk I/O sorunlarını nasıl azaltırım?
Öneriler: Temp upload dizinlerini hızlı NVMe disklerde tutun, streaming yazma (append) kullanın, mümkünse uygulama sunucusunu bypass ederek doğrudan object storage kullanın.
Sonuç
Özetle, büyük dosya yüklemelerinde tek bir "en iyi" çözüm yoktur; gereksinimlerinize göre chunked/resumable yöntemleri, doğrudan S3/object storage yaklaşımlarını veya proxy-streaming çözümlerini tercih edebilirsiniz. Küçük ölçekli projeler için basit konfigurasyon artıları yeterli olurken, yüksek trafik veya çok büyük dosyalar için presigned S3 multipart ve sunucu tarafı optimizasyonları önerilir.
Corelux olarak, ihtiyaçlarınıza uygun VPS, Bulut Sunucu veya yüksek kapasiteli Kiralık Sunucu çözümleri ile büyük dosya yüklemelerinde performans ve güvenlik sağlayabiliriz. Ayrıca Yedekleme ve SSL Sertifikası hizmetlerimiz entegrasyon açısından yardımcı olur.
Eğer projeniz için özel bir mimari veya konfigürasyon önerisi isterseniz, Corelux ekipleriyle iletişime geçerek sunucu gereksinimlerinizi paylaşabilirsiniz.
Yazar
Boran BAR