197 votes

Augmenter client_max_body_size dans le fichier de configuration Nginx sur AWS Elastic Beanstalk

Je rencontre des erreurs "413 Demande trop volumineuse" lorsque je poste des fichiers de plus de 10 Mo sur notre API fonctionnant sur AWS Elastic Beanstalk.

J'ai effectué pas mal de recherches et je pense que je dois augmenter client_max_body_size pour Nginx, cependant je ne parviens pas à trouver de documentation sur la façon de le faire en utilisant Elastic Beanstalk. Je suppose que cela doit être modifié en utilisant un fichier d'extension ebtension.

Quelqu'un a des idées sur la façon dont je peux augmenter la limite ? 10 Mo c'est assez faible, il doit y avoir un moyen de l'augmenter manuellement.

261voto

Nick Parsons Points 1075

Il existe deux méthodes que vous pouvez prendre 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 tous les autres plateformes Nginx semblent prendre en charge cela), Elasticbeanstalk a une compréhension intégrée de la manière de configurer Nginx.

Pour étendre la configuration nginx par défaut d'Elastic Beanstalk, ajoutez des fichiers de configuration .conf dans un dossier nommé .ebextensions/nginx/conf.d/ dans votre bundle source d'application. La configuration nginx d'Elastic Beanstalk inclut automatiquement les fichiers .conf de ce dossier.

~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- web.jar

Configuration du Reverse Proxy - Java SE

Pour augmenter spécifiquement la taille maximale de téléchargement, créez un fichier à .ebextensions/nginx/conf.d/proxy.conf définissant la taille maximale du corps comme vous le préférez:

client_max_body_size 50M;

Créer le fichier de configuration Nginx directement

Pour certains autres types d'applications, après de nombreuses recherches et des heures de travail avec l'équipe de support AWS, j'ai créé un fichier de configuration à l'intérieur de .ebextensions pour compléter la configuration nginx. Ce changement a permis d'augmenter la taille du corps des posts.

À l'intérieur du répertoire .ebextensions, j'ai créé un fichier appelé 01_files.config avec le contenu suivant :

files:
    "/etc/nginx/conf.d/proxy.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
           client_max_body_size 20M;

Cela génère un fichier proxy.conf à l'intérieur du répertoire /etc/nginx/conf.d. Le fichier proxy.conf contient simplement la ligne client_max_body_size 20M; qui fait l'affaire.

Notez que pour certaines plateformes, ce fichier sera créé lors du déploiement, mais sera ensuite supprimé lors d'une phase de déploiement ultérieure.

Vous pouvez spécifier d'autres directives qui sont détaillées dans la documentation de Nginx.

http://wiki.nginx.org/Configuration

169voto

Jijo Cleetus Points 517

J'ai essayé tous les méthodes .ebextensions d'ajouter une 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 recherche et après avoir consulté les journaux, j'ai constaté que le tâche de déploiement vérifie un dossier appelé .platform à chaque fois et j'ai pensé en ajouter un juste comme le .ebextensions. Ci-dessous les paramètres que j'ai ajoutés dans le dossier racine de mon projet.

Ajoutez la configuration de dossier ci-dessous au niveau racine de votre dossier de projet.

Structure de dossier (.platform/nginx/conf.d/proxy.conf)

.platform/
         nginx/
              conf.d/
                    proxy.conf
         00_myconf.config

Contenu du fichier 1 - proxy.conf (à l'intérieur du dossier .platform/nginx/conf.d/)

client_max_body_size 50M;

Contenu du fichier 2 - 00_myconf.config (à l'intérieur du dossier .platform/)

container_commands:
  01_reload_nginx:
    command: "service nginx reload"

Faites attention aux extensions. Le premier fichier est .conf et le deuxième fichier est .config.

Maintenant re-déployez 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 du dimensionnement automatique.

Structure détaillée du dossier ci-dessous.

entrez la description de l'image ici

55voto

JanDintel Points 101

Lorsque vous utilisez Amazon Linux 2 (peu importe la plate-forme)

La réponse acceptée est correcte lorsque vous utilisez un environnement Elastic Beanstalk plus ancien utilisant Amazon Linux AMI. Les environnements Elastic Beanstalk plus récents utilisent Amazon Linux 2 AMI.

Lorsque vous utilisez Amazon Linux 2, vous devez spécifier la configuration personnalisée de Nginx dans le répertoire .platform/ au lieu de .ebextensions/.

Cela signifie que vous devrez créer le fichier .platform/nginx/conf.d/proxy.conf avec le contenu client_max_body_size 50M; à la place.

Le répertoire .platform/ a également été mentionné dans une autre réponse, mais cela nécessitait toujours de recharger la configuration de Nginx, avec Amazon Linux 2, le rechargement n'est plus nécessaire.

Vous pouvez trouver plus d'options à ce sujet dans la documentation Extension des plates-formes Linux Elastic Beanstalk.

37voto

user3217794 Points 69
files:
    "/etc/nginx/conf.d/proxy.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
           client_max_body_size 20M;

Modifié la réponse ci-dessus pour des raisons de sécurité (et la syntaxe était incorrecte, voyez, deux entrées 'owner:' dans le YAML), les gars, s'il vous plaît ne définissez pas les autorisations 777 sur N'IMPORTE QUOI. À moins que vous aimiez être piraté, et définissez le propriétaire des fichiers de configuration Nginx sur root.

Voir également la réponse ci-dessous pour que nginx prenne en compte ce changement après le déploiement.

23voto

Will Points 1563

MODIFIER : Après avoir déployé une version avec les instructions de la réponse acceptée de Nick Parsons, vous devrez peut-être redémarrer le serveur nginx pour prendre en compte les changements.

Pour ce faire, connectez-vous en SSH à l'instance et tapez

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'étais capable d'ajouter une 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 prendra en compte les paramètres client_max_body_size tant que cette instruction est dans votre fichier de configuration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X