Nginx'de client_max_body_size ile Yükleme Limitini Artırma

Nginx web sunucusu, yüksek performanslı yapısıyla modern web uygulamalarında sıkça tercih edilir.

Nginx web sunucusu, yüksek performanslı yapısıyla modern web uygulamalarında sıkça tercih edilir. Ancak, dosya yükleme işlemlerinde karşılaşılan varsayılan limitler, büyük dosyaların yüklenmesini engelleyebilir. Bu durum, özellikle medya dosyaları, yedeklemeler veya büyük form verileriyle çalışan sitelerde sorun yaratır. client_max_body_size direktifi, bu limite müdahale ederek yükleme kapasitesini güvenli bir şekilde artırmanıza olanak tanır. Bu makalede, Nginx konfigürasyonunda bu ayarı nasıl etkili bir biçimde uygulayacağınızı adım adım inceleyeceğiz. Pratik örnekler ve test yöntemleriyle, sunucunuzu optimize etmenin yollarını keşfedeceksiniz.

client_max_body_size Direktifinin Temelleri

client_max_body_size, Nginx’in bir istemciden kabul edebileceği maksimum istek gövdesi boyutunu belirler. Varsayılan değeri 1 MB’dir ve bu, HTTP POST veya PUT isteklerindeki dosya yüklemelerini sınırlar. Bu direktif, güvenlik açısından kritik öneme sahiptir; çünkü sınırsız yüklemeler sunucu kaynaklarını tüketebilir ve DDoS saldırılarına kapı aralayabilir. Birimi bayt (b), kilobayt (k), megabayt (m) veya gigabayt (g) olabilir. Örneğin, 100 MB’lik bir limite ayarlamak için client_max_body_size 100m; kullanılır.

Bu ayarı doğru konumlandırmak esastır. Direktif, http, server veya location bloklarında tanımlanabilir. http bloğunda global olarak uygulanırken, location bloğunda belirli yollar için özelleştirilebilir. Bu esneklik, farklı endpoint’ler için ayrı limitler belirlemenizi sağlar. Uygulama öncesi, mevcut konfigürasyonu nginx -t komutuyla doğrulayın ki syntax hatalarından kaçının.

Nginx Konfigürasyonunda client_max_body_size Ayarlama Adımları

Ayarı uygulamak için öncelikle Nginx konfigürasyon dosyasını düzenleyin. Ana dosya genellikle /etc/nginx/nginx.conf veya site bazlı /etc/nginx/sites-available/ dizinindedir. server bloğu içinde client_max_body_size 500m; ekleyin. Bu, o sunucu için 500 MB limite izin verir. Değişiklikleri kaydedin ve nginx -t ile test edin. Sorunsuzsa, nginx -s reload ile yeniden yükleyin; bu işlem kesintisizdir ve sunucuyu yeniden başlatmaz.

  1. Konfigürasyon dosyasını açın: sudo nano /etc/nginx/sites-available/default.
  2. server bloğuna ekleyin: client_max_body_size 1g;.
  3. Syntax kontrolü: sudo nginx -t.
  4. Yeniden yükle: sudo nginx -s reload.
  5. Logları izleyin: tail -f /var/log/nginx/error.log.

İleri seviye için, belirli bir location’a odaklanın. Örneğin, yükleme endpoint’i /upload ise:

location /upload {
    client_max_body_size 2g;
    # Diğer direktifler...
}

Bu yaklaşım, kaynak kullanımını optimize eder. Ayrıca, proxy_max_temp_file_size gibi ilgili direktifleri göz önünde bulundurun; proxy modunda büyük dosyalar için geçicidir.

Global HTTP Bloğunda Uygulama

http bloğunda ayarlamak, tüm sunuculara yayar. nginx.conf‘ta http { client_max_body_size 256m; } şeklinde ekleyin. Bu, birden fazla sanal sunucu için tutarlılık sağlar. Ancak, güvenlik için her server bloğunda override edin. Uygulama sonrası, curl -X POST -d @bigfile.txt http://example.com/upload ile test edin. Hata alırsanız, loglarda 413 kodunu arayın.

Sunucu ve Location Seviyesinde Özelleştirme

server bloğu, domain bazlı limitler için idealdir. Birden fazla site yönetiyorsanız, her birinde ayrı ayarlayın. Location ile, API endpoint’lerini koruyun. Örnek: Resim yükleme için 50m, video için 5g. Bu granularite, performans ve güvenliği dengeler. Değişiklik sonrası, systemctl reload nginx kullanın systemd tabanlı sistemlerde.

Test Etme ve Yaygın Sorunların Çözümü

Ayarı doğrulamak için pratik testler yapın. Basit bir HTML formu oluşturun ve büyük bir dosyayı yükleyin. Tarayıcıda 413 “Payload Too Large” hatası alıyorsanız, limit yetersizdir. Komut satırından curl -F “file=@/path/to/largefile.iso” http://localhost/upload ile simüle edin. Başarılıysa, yanıt 200 OK döner. Logları access_log ve error_log ile inceleyin; boyut bilgilerini buradan teyit edin.

Yaygın sorunlar arasında syntax hataları, önbellek tutma ve PHP-FPM entegrasyonu yer alır. PHP ile çalışıyorsanız, php.ini‘de upload_max_filesize ve post_max_size‘ı da artırın; örneğin 512M. Nginx proxy’si varsa, upstream’de client_max_body_size miras alınır. Sunucu belleğini izleyin; büyük limitler RAM tüketimini artırır. Güvenlik için, rate limiting ile birleştirin: limit_req_zone.

Bu adımları izleyerek, Nginx sunucunuzda dosya yükleme limitlerini verimli bir şekilde yönetebilirsiniz. Düzenli bakım ve izleme ile, uygulamanızın ölçeklenebilirliğini artırın. Pratik deneyimle, bu ayarların iş akışınızı nasıl dönüştürdüğünü göreceksiniz.

Kategori: Web Sunucu
Yazar: Lorem
çerik: 526 kelime
Okuma Süresi: 4 dakika
Zaman: Bugün
Yayım: 24-02-2026
Güncelleme: 24-02-2026