client_max_body_size în Nginx

Stabilește dimensiunea maximă permisă pentru corpul unei cereri HTTP (încărcări de fișiere) și previne eroarea 413.

Sintaxă
client_max_body_size dimensiune;

Ce face client_max_body_size

În mod implicit, Nginx acceptă un corp de cerere HTTP (Content-Length) de cel mult 1 megabyte (client_max_body_size 1m;). De îndată ce un utilizator încearcă să încarce o fotografie, un PDF sau o arhivă mai mare de 1 MB, Nginx oprește încărcarea chiar înainte ca cererea să ajungă la PHP sau la aplicația din spate și răspunde cu eroarea 413 Request Entity Too Large.

Directiva client_max_body_size poate fi pusă în http (pentru toate site-urile), în server (pentru un anumit site) sau chiar într-un singur location (de exemplu 100m doar pe location /upload, păstrând o limită mică pe restul site-ului). Valoarea 0 dezactivează complet verificarea dimensiunii.

Pentru aplicațiile PHP, mărirea limitei în Nginx nu este suficientă singură: trebuie ca și upload_max_filesize și post_max_size din php.ini să fie cel puțin la fel de mari.

Opțiuni și argumente

Opțiune / Parametru Descriere
Context: http, server, location Valoarea implicită este 1m (1 megabyte).
dimensiune (20m, 100m, 2g) Sufixul k pentru kiloocteți, m pentru megaocteți, g pentru gigaocteți.
0 Dezactivează verificarea mărimii corpului cererii.
client_body_timeout Timpul maxim între două citiri succesive ale corpului cererii (implicit 60s; crește-l pentru încărcări foarte mari pe conexiuni lente).

Exemple

Exemplul 1: Limită de 64 MB pentru un site și 500 MB doar pe ruta de import

Un location specific poate avea o limită mai mare decât restul site-ului:

server {
    listen 80;
    server_name example.com;

    # Limită generală pe întregul site
    client_max_body_size 64m;

    # Limită mai mare doar pentru ruta de import
    location /admin/import {
        client_max_body_size 500m;
        client_body_timeout  300s;

        include proxy_params;
        proxy_read_timeout 300s;
        proxy_pass http://127.0.0.1:3000;
    }
}

Exemplul 2: Corelarea cu limitele din php.ini (PHP-FPM)

Pentru încărcări de până la 64 MB în PHP, verifică și cele două directive din /etc/php/8.3/fpm/php.ini:

grep -E '^(upload_max_filesize|post_max_size)' /etc/php/8.3/fpm/php.ini
sudo systemctl reload php8.3-fpm

Ieșire în terminal

post_max_size = 64M
upload_max_filesize = 64M

Greșeli frecvente

  • Mărirea upload_max_filesize în php.ini fără a mări client_max_body_size în Nginx (sau invers): dacă eroarea este o pagină Nginx 413 Request Entity Too Large, cauza este în Nginx; dacă pagina se încarcă, dar aplicația PHP raportează că fișierul lipsește sau e prea mare, cauza este în php.ini.
  • Scrierea unității ca 64MB în loc de 64m: în Nginx sufixul este doar o literă (k, m, g); 64MB produce eroare la nginx -t.

Comenzi înrudite

  • fastcgi_pass: Trimite scripturile .php către PHP-FPM prin protocolul FastCGI (socket Unix sau port TCP).
  • proxy_pass: Trimite cererea către un server backend (Node.js, Python, Go, Docker) și returnează răspunsul clientului.
  • server: Definește un server virtual (un site) cu porturile, numele de domeniu și regulile sale.
  • location: Potrivește calea URI a cererii (exact, cu prefix sau cu expresie regulată) și aplică regulile corespunzătoare.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: client_max_body_size

Ai o nelămurire despre utilizarea comenzii client_max_body_size sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.