Je rencontre des erreurs «413 Request Entity Too Large» lorsque je publie des fichiers de plus de 10 Mo sur notre API exécutée sur AWS Elastic Beanstalk.
J'ai fait pas mal de recherches et je pense que j'ai besoin d'augmenter la taille client_max_body_size pour Nginx, mais je n'arrive pas à trouver de documentation sur la façon de faire cela en utilisant Elastic Beanstalk. Je suppose qu'il doit être modifié à l'aide d'un fichier ebetension.
Quelqu'un a-t-il des idées sur la façon dont je peux augmenter la limite? 10 Mo est assez faible, il doit y avoir un moyen de le faire manuellement.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
la source
la source
Réponses:
Il existe deux méthodes que vous pouvez utiliser pour cela. Malheureusement, certaines fonctionnent pour certains types d'applications EB et d'autres pour d'autres.
Pris en charge / recommandé dans la documentation AWS
Pour certains types d'applications, comme Java SE , Go , Node.js et peut-être Ruby (ce n'est pas documenté pour Ruby, mais toutes les autres plates-formes Nginx semblent le prendre en charge), Elasticbeanstalk a une compréhension intégrée de la configuration de Nginx.
Pour augmenter spécifiquement la taille de téléchargement maximale, créez un fichier en
.ebextensions/nginx/conf.d/proxy.conf
définissant la taille maximale du corps sur la taille que vous préférez:Créez directement le fichier de configuration Nginx
Après de nombreuses recherches et des heures de travail avec la merveilleuse équipe de support AWS, j'ai créé un fichier de configuration à l'intérieur de
.ebextensions
pour compléter la configuration de nginx. Ce changement a permis une plus grande taille de corps de poteau.À l'intérieur du
.ebextensions
répertoire, j'ai créé un fichier appelé01_files.config
avec le contenu suivant:Cela génère un fichier proxy.conf dans le répertoire /etc/nginx/conf.d. Le fichier proxy.conf contient simplement la seule ligne
client_max_body_size 20M;
qui fait l'affaire.Notez que pour certaines plates-formes, ce fichier sera créé lors du déploiement, puis supprimé lors d'une phase de déploiement ultérieure.
Vous pouvez spécifier d'autres directives qui sont décrites dans la documentation Nginx.
http://wiki.nginx.org/Configuration
J'espère que cela aide les autres!
la source
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Je ne suis pas sûr, mais il semblait que le redémarrage du serveur pourrait être nécessaire..ebextensions
n'est pas dans.ebignore
et.gitignore
🖖 Je n'ai pas besoin de redémarrer le service nginx,eb deploy
et cela a fonctionné 🎉Modification de la réponse ci-dessus pour des raisons de sécurité (et la syntaxe était fausse, voyez, deux entrées 'owner:' dans le YAML), les gars, veuillez ne pas définir 777 autorisations sur TOUT. Sauf si vous aimez être piraté et que vous définissez le propriétaire des fichiers de configuration Nginx sur root.
Voir également la réponse ci - dessous pour que nginx récupère ce changement après le déploiement.
la source
EDIT: Après avoir déployé une version avec les instructions de la réponse acceptée par Nick Parsons, vous devrez peut-être redémarrer le serveur nginx pour récupérer les modifications.
Pour ce faire, ssh sur l'instance et faites
sudo service nginx reload
Pour en savoir plus sur le rechargement, consultez http://nginx.org/en/docs/beginners_guide.html .
Dans une version précédente d'Elastic Beanstalk, j'ai pu ajouter une commande container_command pour accomplir cela, mais maintenant je constate, comme @cdmckay, que cela provoque un échec de déploiement. Si vous reconstruisez votre environnement, il récupérera les paramètres client_max_body_size aussi longtemps que cette instruction est dans votre fichier de configuration.
la source
La réponse acceptée n'a pas fonctionné pour moi car j'ai une application basée sur JVM et il semble que la configuration de NGINX soit différente. Je verrais un fichier proxy.conf créé pendant le déploiement, puis supprimé par la suite avant la fin du déploiement. La documentation AWS explique comment configurer le proxy :
Créez un
.ebextensions/nginx/conf.d/proxy.conf
fichier qui ne contient que la ligne:client_max_body_size 40M;
la source
/etc/nginx/conf.d/
Suite à la réponse acceptée, vous devrez peut-être recharger le fichier de configuration nginx.
Pour ce faire, ajoutez la commande suivante
Ce serait une meilleure pratique que de ssh'ing dans votre instance eb et de le faire manuellement avec une commande.
Ceci combiné avec la réponse acceptée a résolu le même problème pour moi. (Rails, Puma, NGINX)
la source
La seule chose qui a fonctionné pour moi a été de créer un fichier ".config" dans .ebextensions comme celui-ci:
avec uniquement ce contenu dans le fichier .config:
pas besoin de sous-dossiers, pas besoin de redémarrer le serveur d'application, faites attention que c'est un fichier ".config" pas un ".conf" à l'intérieur de .ebextensions et l'utilisation d'une indentation appropriée pour éviter les erreurs dans la console aws le reste est le même peu importe le nom du fichier,
merci à: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
la source
J'ai essayé toutes les
.ebextensions
méthodes d'ajout de configuration au niveau de l'implémentation et cela ne m'a pas aidé dans la dernière AMI Amazon Linux. J'ai fait beaucoup de recherches et après avoir parcouru les journaux, je peux trouver que le lanceur de la tâche de déploiement vérifie un dossier appelé à.platform
chaque fois et j'ai pensé en ajouter un comme les .ebextensions. Voici les paramètres que j'ai définis dans mon dossier racine de mon projet.Ajoutez la configuration de dossier ci-dessous au niveau racine de votre dossier de projet.
Structure des dossiers (.platform / nginx / conf.d / proxy.conf)
Contenu du fichier 1 - proxy.conf (
.platform/nginx/conf.d/
dossier intérieur )Contenu du fichier 2 - 00_myconf.config (
.platform/
dossier intérieur )Soin plein avec les extensions. Le premier fichier est .conf et le deuxième fichier est .config .
Redéployez maintenant votre projet sur Amazon Elastic Beanstalk et vous verrez la magie. Cette configuration sera ajoutée à toutes vos instances EC2, créées dans le cadre de la mise à l'échelle automatique.
Structure de dossier détaillée ci-dessous.
la source
.ebextensions
et seule cette approche a fonctionné.La réponse acceptée n'a pas fonctionné pour moi, alors j'ai remplacé la configuration nginx par la mienne.
J'ai créé un fichier appelé
nginx.conf
sous le répertoire.ebextensions/nginx/
Je me suis connecté en SSH dans une instance en cours d'exécution de mon application Beanstalk et j'ai copié le contenu du
nginx.conf
fichier, en utilisantcat /etc/nginx/nginx.conf
et en copiant à partir du terminal.J'ai collé le contenu dans le
nginx.conf
fichier que j'avais précédemment créé.ebextensions/nginx/
et modifié la directive http pour l'inclureclient_max_body_size 50M;
. J'ai finalement redéployé mon application en utilisanteb deploy
et cela a fonctionné. Vous devriez recevoir le message suivant lors du déploiement:Voici le contenu de mon
.ebextensions/nginx/nginx.conf
fichier:Je n'ai pas eu à redémarrer le service nginx ni l'environnement.
Remarque : assurez-vous que votre .ebextensions fait partie du fichier .zip créé et téléchargé sur Beanstalk lors du déploiement (il n'est pas ignoré dans
.gitignore
ou.ebignore
si vous l'utilisez).la source
.ebextensions
qui a fait échouer la réponse acceptée et populaire. Je n'ai pas essayé tout ce que vous avez mentionné, mais merci pour la note 🍻Il s'agit de la solution fournie par AWS , et cela fonctionne (ajustez la taille en fonction de vos besoins)
la source
Vous pouvez également changer le serveur proxy en Apache. Pour ce faire, accédez à la configuration et éditez la configuration logicielle. La première option ici est «Serveur proxy», sélectionnez «apache».
la source
LimitRequestBody
?Pour Golang sans Docker, j'ai suivi ces instructions de aws doc:
J'ai créé le fichier
proxy.conf
dans.ebextensions/nginx/conf.d/
la racine de mon projet, avec simplement 1 ligne à l' intérieur:Si cela ne fonctionne toujours pas, assurez-vous que le
.ebextensions
dossier et les sous-dossiers sont inclus dans votre zip de déploiement. Pas besoin de redémarrer Nginx manuellement.la source
J'étais aux prises avec le même problème mais je n'ai pas pu le résoudre, finalement ça marche.
voici mon fichier congfig,
Le problème était,
Voici mes quelques centimes,
la source
Après 3 longs jours à essayer de comprendre celui-ci, j'ai sauté sur un appel avec l'incroyable équipe de support AWS et ils m'ont donné des indices sur la façon de le résoudre. Tout d'abord, mon projet est en JAVA et j'utilise maven et spring boot pour l'exécuter via Elastic Beanstalk (EBS).
Comme expliqué dans la documentation d'AWS , vous devez stocker les paramètres nginx personnalisés au niveau racine de votre projet. Pour ce faire , je l' ai créé un fichier client_max_body_size.conf et placé dans le chemin suivant: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Ce fichier contient la ligne suivante:
Configurez maven pour ajouter ce fichier dans le dossier racine de mon projet lors de la construction. C'était un peu délicat, j'avais besoin d'ajouter la configuration suivante ( source ) dans mon POM.xml:
Vous pouvez maintenant déjà créer votre projet localement et exécuter la commande SSH suivante pour valider qu'il se trouve réellement à la racine de votre projet:
Maintenant, c'est la partie délicate. Lorsque vous le téléchargez sur EBS, votre fichier ne doit contenir que le fichier SNAPSHOT.jar et le dossier .ebextensions. Par exemple, si vous allez maintenant compresser le fichier jar et le dossier et les télécharger manuellement, cela fonctionnera!
Étant donné que j'utilise Jenkins pour mon déploiement, et en particulier le plug -in de déploiement AWS EBS , vous devez modifier les paramètres des fichiers / dossier que vous incluez dans le déploiement. Maintenant, pour une raison quelconque, je n'ai pas pu inclure le dossier .ebextensions, j'ai donc simplement exclu tout le reste, sauf le dossier et le fichier .jar.
Cela marche!
la source
En plus de client_max_body_size, j'ai dû ajouter client_body_buffer_size . Voici le fichier de configuration dot qui a fonctionné, pour une pièce jointe de 2 Mo:
la source
Pour la plateforme Java
Pour créer le fichier proxy de configuration NGINX, vous devez simplement ajouter
.ebextension/nginx/conf.d/proxy.conf
fichieravec le contenu
client_max_body_size 20M;
en elle."proxy.conf" sera déployé dans "/etc/nginx/conf.d/proxy.conf" et automatiquement inclus par la configuration NGINX.
la source
Si vous exécutez EC2 et installez vous-même nginx, la meilleure solution consiste à créer un nouveau fichier dans
dossier:
puis ajoutez-y la ligne suivante:
puis enregistrez et redémarrez nginx:
la source