102 votes

"413 Demande de l'entité trop volumineuse" dans Nginx avec "client_max_body_size" défini

Je télécharge un fichier de 26 Go, mais je reçois :

413 Demande trop volumineuse

Je sais, c'est lié à client_max_body_size, donc j'ai ce paramètre défini à 30000M.

  location /supercap {
    root  /media/ss/synology_office/server_Seq-Cap/;
    index index.html;
    proxy_pass  http://api/supercap;
  }

  location /supercap/pipe {
    client_max_body_size 30000M;
    client_body_buffer_size 200000k;
    proxy_pass  http://api/supercap/pipe;
    client_body_temp_path /media/ss/synology_office/server_Seq-Cap/tmp_nginx;
  }

Mais je reçois toujours cette erreur une fois que le fichier entier a été téléchargé.

0 votes

En fait, vous ne devez pas télécharger cette taille en une seule demande. Vous devez la diviser en partitions et les envoyer une par une par demande.

126voto

Sukhjinder Singh Points 1924

Modifier le fichier de configuration NGINX

sudo nano /etc/nginx/nginx.conf

Recherchez cette variable : client_max_body_size. Si vous la trouvez, augmentez simplement sa taille à 100M, par exemple. Si elle n'existe pas, vous pouvez l'ajouter à l'intérieur et à la fin de http

client_max_body_size 100M;

Testez vos modifications de configuration nginx.

sudo service nginx configtest

Redémarrez nginx pour appliquer les changements.

sudo service nginx restart

Modifier le fichier PHP.ini pour les limites de téléversement

Ce n'est pas nécessaire sur toutes les configurations, mais vous devrez peut-être également modifier les paramètres de téléversement PHP pour vous assurer que rien ne dépasse les limites des configurations php.

Si vous utilisez PHP5-FPM, utilisez la commande suivante,

sudo nano /etc/php5/fpm/php.ini

Si vous utilisez PHP7.0-FPM, utilisez la commande suivante,

sudo nano /etc/php/7.0/fpm/php.ini

Recherchez maintenant les directives suivantes une par une

upload_max_filesize
post_max_size

et augmentez leur limite à 100M, par défaut ils sont de 8M et 2M.

upload_max_filesize = 100M
post_max_size = 100M

Enregistrez enfin et redémarrez PHP.

Utilisateurs de PHP5-FPM utilisez ceci,

sudo service php5-fpm restart

Utilisateurs de PHP7.0-FPM utilisez ceci,

sudo service php7.0-fpm restart

Ça devrait fonctionner parfaitement !!!

1 votes

Pourquoi 100Mo pour client_max_body_size dans nginx.conf?

0 votes

Vous pouvez mettre n'importe quelle valeur selon vos besoins mais 100 Mo est suffisant

3 votes

Mais je télécharge des fichiers allant jusqu'à 30 Go.

31voto

T-u-s-t-y Points 157

Si vous téléversez des fichiers de cette taille, vous devriez probablement simplement désactiver complètement la vérification de la taille du corps avec :

client_max_body_size 0;

8voto

Matt Murphy Points 233

Avec tout le respect dû, je ne suis pas sûr pourquoi vous utilisez http pour transférer autant de données. Je tends à faire mes gros transferts via ssh

//tel que:
tar cjf - /chemin/vers/truc | ssh utilisateur@hôte-distant "cd /chemin/vers/truc-distant;tar xjf -"

...ce qui me donne un transfert compressé en bzip. Mais si j'avais besoin de faire un transfert reparable, je pourrais utiliser sftp, lftp, voire même rsync. Tous ceux-là (ou leurs dérivés ou frères) sont capables de

  1. utiliser un canal chiffré si désiré,
  2. reprendre un transfert interrompu et
  3. compresser le transfert

Seul l'un d'entre eux serait une option pour vous lorsque vous essayez de télécharger via http (notamment, #1 si vous étiez sur https).

J'espère que vous examinerez l'une des options ci-dessus ou les plusieurs autres alternatives disponibles.

4 votes

Cela n'a vraiment rien à voir avec la question.

7 votes

C'est simplement là parce que le gars transfère des fichiers à échelle de couleurs Blueray via http. Sans avoir plus de détails sur la raison pour laquelle quelqu'un voudrait faire cela, je juge que le gars posant la question serait mieux servi en ne répondant pas avec succès à la question. Je reconnais que mon ignorance de ces détails est un problème.

0 votes

Etes-vous sûr de 2 et 3 ?

1voto

Jason Jenkins Points 2594

Ajoutez la ligne suivante au contexte http ou server ou location pour augmenter la limite de taille dans nginx.conf, saisissez :

client_max_body_size 100M;

Source: https://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/

La directive client_max_body_size peut être ajoutée dans http, server ou location.

Notez que la taille maximum du corps sera généralement 1,34 fois plus grande que le fichier qui est téléversé. Par exemple, la limite mentionnée ci-dessus 100M ne permettra qu'un fichier de 74M à être téléversé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X