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înphp.inifără a măriclient_max_body_sizeîn Nginx (sau invers): dacă eroarea este o pagină Nginx413 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 înphp.ini. - Scrierea unității ca
64MBîn loc de64m: în Nginx sufixul este doar o literă (k,m,g);64MBproduce eroare langinx -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.
Întrebări & Exemple de Cod:
client_max_body_sizeAi o nelămurire despre utilizarea comenzii
client_max_body_sizesau 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.