Nginx "413 Request Entity Too Large" hatası: client_max_body_size

Nginx ve Web Sunucusu 73 görüntülenme Markdown

Bir dosyayı sitenize yüklemeye çalışıyorsunuz ve tarayıcı şu sayfayı gösteriyor: 413 Request Entity Too Large. İstek, dosya PHP ya da uygulamanıza ulaşmadan Nginx tarafından reddedildi. Nginx varsayılan olarak bir isteğin gövdesini (yüklenen dosya dahil) 1 MB ile sınırlar. Bu sınırı yükseltmek için client_max_body_size ayarını kullanırsınız.

Ayarı nereye yazmalı?

Üç seviyede tanımlanabilir; en dar olan kazanır:

  • http { } bloğunda: tüm siteler için.
  • server { } bloğunda: yalnızca o site için. Çoğu durumda en uygun yer burasıdır.
  • location { } bloğunda: yalnızca belirli bir yol için (örneğin sadece yükleme adresi).

Örnek, sadece bir siteyi 64 MB'a yükselten ayar:

server {
    listen 80;
    server_name ornek.com;
    client_max_body_size 64M;
    ...
}

Ayarı yazdıktan sonra sınayıp yeniden yükleyin:

sudo nginx -t
sudo systemctl reload nginx

Hangi dosyada olduğunu bilmiyorsanız mevcut tanımları bulun: sudo grep -rn client_max_body_size /etc/nginx/. Hiçbir sonuç yoksa varsayılan 1 MB geçerlidir. Değer 0 sınırı tamamen kaldırır; güvenlik açısından önerilmez.

PHP de sınırlıdır

Nginx sınırını yükseltmek tek başına yetmez; PHP'nin kendi sınırları vardır ve ikisi uyumlu olmalıdır:

  • upload_max_filesize: tek dosya sınırı
  • post_max_size: tüm istek gövdesinin sınırı (upload_max_filesize'dan büyük ya da ona eşit olmalı)

Bunları /etc/php/8.3/fpm/php.ini dosyasında (sürüm numarasını kendinize göre değiştirin) yükseltin ve sudo systemctl restart php8.3-fpm yapın. Kendi hosting paketinizde bu değerler .user.ini ile ayarlanır: PHP ayarları. Hosting sunucumuzda Nginx sınırı tarafımızca yönetilir ve PHP sınırları 100 MB'tır.

Büyük dosya ve zaman aşımı

Çok büyük bir dosyayı yavaş bağlantıyla yüklüyorsanız 413 değil de 408 ya da 504 görebilirsiniz. Uzun yüklemeler için client_body_timeout 120s; ve PHP'de max_execution_time değerlerine bakın. Gerçekten büyük dosyalar (yüzlerce MB) için tarayıcıdan yükleme yerine SFTP kullanın: SFTP ile yükleme.

Arkada başka bir uygulama varsa

Nginx bir Node.js, Python ya da Docker uygulamasının önünde duruyorsa (proxy_pass), uygulamanın kendi gövde sınırı da olabilir (Express'te limit, Django'da DATA_UPLOAD_MAX_MEMORY_SIZE). Önce Nginx sınırını, sonra uygulama sınırını yükseltin. Ayarın hangi katmandan geldiğini hata mesajının biçiminden anlarsınız: Nginx'in kendi HTML sayfası "nginx" yazar, uygulama ise kendi hata biçimini gösterir. WordPress'te sorun resim yüklemekse: resim yüklenmiyor.

Sık sorulanlar

Ayarı yazdım ama hâlâ 413 alıyorum.

Ayar yanlış blokta olabilir, reload yapılmamış olabilir ya da bir üst katman (Cloudflare gibi bir proxy ya da yük dengeleyici) kendi sınırını uyguluyordur. Cloudflare ücretsiz planda tek istekte 100 MB sınırı koyar.

client_max_body_size 1G yazsam olur mu?

Teknik olarak çalışır ama uygunsuzdur; kötü niyetli biri sunucunuzu büyük isteklerle doldurabilir. Gerçek ihtiyacınızdan biraz büyük bir sayı seçin ve yalnızca yükleme yolunda kullanın.

Hosting'de Nginx ayarını değiştirebilir miyim?

Hayır; hosting sunucusunun Nginx ayarı sizin kontrolünüzde değildir. Sınırı aşıyorsanız dosyayı küçültün ya da FTP kullanın.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.