Probleem: Nginx's client_max_body_size directive heeft geen effect
Bij het instellen van Nginx kunt u een probleem tegenkomen waarbij de client_max_body_size directive niet werkt zoals verwacht. Dit kan leiden tot afgewezen verzoeken of beperkingen bij het uploaden van bestanden. Begrijpen waarom dit gebeurt en hoe u dit kunt oplossen is essentieel voor een goed werkende webserver.
Configureren van client_max_body_size in Nginx
Het Configuratiebestand Vinden
Het Nginx configuratiebestand bevindt zich meestal op een van deze locaties:
- /etc/nginx/nginx.conf
- /usr/local/nginx/conf/nginx.conf
- /usr/local/etc/nginx/nginx.conf
Serverblok configuraties bevinden zich vaak in afzonderlijke bestanden in de /etc/nginx/sites-available/ directory, met links in /etc/nginx/sites-enabled/.
Locatieblok instellingen bevinden zich in serverblokken, wat specifieke configuraties mogelijk maakt.
De Uploadlimiet Instellen
De syntaxis voor de client_max_body_size directive is:
client_max_body_size size;
Enkele waarden voor verschillende toepassingen:
- Kleine bestandsuploads (profielfoto's): 2-5 MB
- Document uploads: 10-20 MB
- Grote bestandsuploads (video's): 100 MB - 1 GB
Om veiligheid en functionaliteit in balans te brengen:
- Stel een standaardlimiet in in het http blok
- Pas limieten aan voor specifieke server- of locatieblokken indien nodig
- Monitor serverbronnen en pas indien nodig aan
- Gebruik andere beveiligingsmaatregelen zoals rate limiting voor grote uploads
Test uw configuratie na het aanbrengen van wijzigingen om er zeker van te zijn dat deze correct werkt.
Problemen Oplossen met client_max_body_size Werkt Niet
Nginx Configuratie Verifiëren
Om te controleren op syntaxfouten in uw Nginx configuratie, voer uit:
nginx -t
Dit commando test de configuratiebestanden en meldt eventuele problemen.
Na het wijzigen van de Nginx configuratie, herlaad deze met:
sudo systemctl reload nginx
of
sudo nginx -s reload
Om Nginx foutlogs te controleren, bekijk dit bestand:
/var/log/nginx/error.log
Zoek naar vermeldingen over aanvraaggrootte of 413 fouten.
Server-Side Applicatieproblemen Onderzoeken
Voor PHP configuratie, controleer deze instellingen in php.ini:
upload_max_filesize = 20M
post_max_size = 20M
Stel deze waarden in om overeen te komen met of hoger te zijn dan uw Nginx client_max_body_size.
Applicatie uploadlimieten kunnen zich bevinden in de configuratiebestanden of code van de app. Raadpleeg de documentatie van uw app om deze limieten aan te passen.
Nginx en uw applicatie moeten samenwerken voor bestandsuploads. Zorg ervoor dat:
- Nginx client_max_body_size hoger is ingesteld dan of gelijk is aan de limiet van de app.
- Uw app is ingesteld om de bestandsgroottes te verwerken die door Nginx zijn toegestaan.
- De webservergebruiker kan schrijven naar de uploaddirectory.
Alternatieve Oplossingen voor Grote Bestandsuploads
Client-Side Bestandssplitsing Implementeren
Client-side bestandssplitsing, ook wel chunked uploads genoemd, biedt voordelen voor het verwerken van grote bestandsuploads:
- Maakt hervattbare uploads mogelijk, waardoor de impact van netwerkproblemen wordt verminderd
- Verbetert de gebruikerservaring door voortgangsfeedback te geven
- Helpt server-side bestandsgroottelimieten te omzeilen
JavaScript bibliotheken voor bestandssplitsing zijn onder andere:
- Resumable.js: Een bibliotheek voor chunked, hervattbare bestandsuploads
- Plupload: Een bestandsuploader met chunking ondersteuning
- Fine Uploader: Een uploader met chunking mogelijkheden
Voor server-side verwerking van chunked uploads:
- Configureer uw server om gedeeltelijke content uploads te accepteren
- Implementeer logica om chunks samen te voegen tot complete bestanden
- Gebruik tijdelijke opslag voor chunks tijdens het uploadproces
- Valideer en verwerk het complete bestand zodra alle chunks zijn ontvangen
Reverse Proxy Gebruiken voor Bestandsuploads
Het configureren van een aparte uploadserver kan helpen bij het beheren van grote bestandsuploads:
- Stel een toegewijde server of container in voor het verwerken van bestandsuploads
- Configureer deze server met hogere resourcelimieten voor bestandsverwerking
- Gebruik Nginx op de hoofdserver als reverse proxy om uploadverzoeken te routeren
Load balancing overwegingen voor bestandsuploads zijn onder andere:
- Uploadverkeer verdelen over meerdere backend servers
- Consistent hashing gebruiken om chunks van hetzelfde bestand naar dezelfde server te routeren
- Healthchecks implementeren om niet-reagerende uploadservers uit de pool te verwijderen
Om Nginx te gebruiken als reverse proxy voor grote bestanden:
- Configureer Nginx om verzoeken door te sturen naar de uploadserver:
location /upload {
proxy_pass http://upload_server;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
- Pas timeout instellingen aan om grote bestandsoverdrachten mogelijk te maken:
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
- Overweeg het gebruik van Nginx's X-Accel-Redirect functie voor het efficiënt serveren van geüploade bestanden





