Ich laufe in „413 anfordern Wesen zu groß“ Fehler , wenn Dateien , die größer als 10 MB auf unsere API läuft auf AWS Elastic Beanstalk veröffentlichen.
Ich habe ziemlich viel recherchiert und glaube, dass ich die client_max_body_size für Nginx erhöhen muss , aber ich kann anscheinend keine Dokumentation dazu finden, wie dies mit Elastic Beanstalk gemacht wird. Ich vermute, dass es mit einer Ebetension-Datei geändert werden muss.
Hat jemand Gedanken darüber, wie ich das Limit erhöhen kann? 10 MB sind ziemlich schwach, es muss eine Möglichkeit geben, dies manuell zu erhöhen.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
quelle
quelle
Antworten:
Hierfür können Sie zwei Methoden anwenden. Leider funktionieren einige für einige EB-Anwendungstypen und einige für andere.
Unterstützt / empfohlen in der AWS-Dokumentation
Für einige Anwendungstypen wie Java SE , Go , Node.js und möglicherweise Ruby (dies ist nicht für Ruby dokumentiert, aber alle anderen Nginx-Plattformen scheinen dies zu unterstützen) verfügt Elasticbeanstalk über ein integriertes Verständnis für die Konfiguration von Nginx.
Um die maximale Upload-Größe speziell zu erhöhen, erstellen Sie eine Datei,
.ebextensions/nginx/conf.d/proxy.conf
indem Sie die maximale Körpergröße auf die gewünschte Größe einstellen:Erstellen Sie die Nginx-Konfigurationsdatei direkt
Nach vielen Recherchen und stundenlanger Arbeit mit dem wunderbaren AWS-Support-Team habe ich eine Konfigurationsdatei erstellt
.ebextensions
, die die Nginx-Konfiguration ergänzt. Diese Änderung ermöglichte eine größere Körpergröße des Pfostens.Innerhalb des
.ebextensions
Verzeichnisses habe ich eine Datei01_files.config
mit dem folgenden Inhalt erstellt:Dadurch wird eine proxy.conf-Datei im Verzeichnis /etc/nginx/conf.d generiert. Die Datei proxy.conf enthält einfach den einen Liner,
client_max_body_size 20M;
der den Trick ausführt .Beachten Sie, dass diese Datei für einige Plattformen während der Bereitstellung erstellt, aber in einer späteren Bereitstellungsphase entfernt wird.
Sie können andere Anweisungen angeben, die in der Nginx-Dokumentation beschrieben sind.
http://wiki.nginx.org/Configuration
Hoffe das hilft anderen!
quelle
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Ich bin mir nicht sicher, aber es schien notwendig, den Server neu zu starten..ebextensions
nicht in.ebignore
und.gitignore
🖖 Ich musste den Nginx-Dienst nicht neu starten,eb deploy
und es hat funktioniert workedDie obige Antwort wurde aus Sicherheitsgründen geändert (und die Syntax war falsch, siehe zwei "Eigentümer:" -Einträge in der YAML), Leute, bitte setzen Sie keine 777-Berechtigungen für ALLES. Es sei denn, Sie genießen es, gehackt zu werden, und setzen den Eigentümer von Nginx-Konfigurationsdateien auf root.
Lesen Sie auch die folgende Antwort , damit Nginx diese Änderung nach der Bereitstellung übernimmt.
quelle
BEARBEITEN: Nachdem Sie einen Build mit den Anweisungen in der von Nick Parsons akzeptierten Antwort bereitgestellt haben, müssen Sie möglicherweise den Nginx-Server neu starten, um die Änderungen zu übernehmen.
Dazu ssh zur Instanz und mach
sudo service nginx reload
Weitere Informationen zum Neuladen finden Sie unter http://nginx.org/en/docs/beginners_guide.html .
In einer früheren Version von Elastic Beanstalk konnte ich einen container_command hinzufügen, um dies zu erreichen, aber jetzt stelle ich wie @cdmckay fest, dass dies einen Bereitstellungsfehler verursacht. Wenn Sie Ihre Umgebung neu erstellen, werden die Einstellungen für client_max_body_size sowie die Anweisungen in Ihrer Konfigurationsdatei übernommen.
quelle
Die akzeptierte Antwort hat bei mir nicht funktioniert, da ich eine JVM-basierte App habe und die NGINX-Konfiguration anscheinend anders funktioniert. Ich würde sehen, dass eine proxy.conf-Datei während der Bereitstellung erstellt, aber später gelöscht wird, bevor die Bereitstellung abgeschlossen wurde. In der AWS-Dokumentation wird erläutert, wie Sie den Proxy konfigurieren :
Erstellen Sie eine
.ebextensions/nginx/conf.d/proxy.conf
Datei, die nur die Zeile enthält:client_max_body_size 40M;
quelle
/etc/nginx/conf.d/
Nach der akzeptierten Antwort müssen Sie möglicherweise die nginx-Konfigurationsdatei neu laden.
Fügen Sie dazu den folgenden Befehl hinzu
Dies ist eine bessere Vorgehensweise, als in Ihre eb-Instanz zu ssh'en und dies manuell mit einem Befehl auszuführen.
Dies zusammen mit der akzeptierten Antwort löste das gleiche Problem für mich. (Schienen, Puma, NGINX)
quelle
Das einzige, was für mich funktioniert hat, war, eine ".config" -Datei in .ebextensions wie folgt zu erstellen:
mit nur diesem Inhalt in der .config-Datei:
Keine Notwendigkeit für Unterordner, keine Notwendigkeit, den Anwendungsserver neu zu starten. Achten Sie darauf, dass es sich bei ".config" nicht um eine ".conf" -Datei in .ebextensions handelt. Verwenden Sie die richtigen Einrückungen, um Fehler in der aws-Konsole zu vermeiden. Der Rest ist der gleiche spielt keine Rolle für den Namen der Datei,
danke an: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
quelle
Die akzeptierte Antwort hat bei mir nicht funktioniert, daher habe ich stattdessen die Nginx-Konfiguration mit meiner eigenen überschrieben.
Ich habe eine Datei erstellt, die
nginx.conf
unter dem Verzeichnis aufgerufen wird.ebextensions/nginx/
Ich habe eine SSH-Verbindung zu einer laufenden Instanz meiner Beanstalk-App hergestellt und den Inhalt der
nginx.conf
Datei mithilfecat /etc/nginx/nginx.conf
des Terminals kopiert und kopiert .Ich habe den Inhalt in die
nginx.conf
Datei eingefügt, in der ich zuvor erstellt habe.ebextensions/nginx/
, und die http-Direktive so geändert, dass sie enthältclient_max_body_size 50M;
. Ich habe meine App endlich neu bereitgestellteb deploy
und es hat funktioniert. Während der Bereitstellung sollte die folgende Meldung angezeigt werden:Dies sind die Inhalte meiner
.ebextensions/nginx/nginx.conf
Datei:Ich musste weder den Nginx-Dienst noch die Umgebung neu starten.
Hinweis : Stellen Sie sicher, dass Ihre .ebextensions Teil der .zip-Datei sind, die während der Bereitstellung erstellt und auf Beanstalk hochgeladen wurde (sie wird in
.gitignore
oder.ebignore
wenn Sie sie verwenden, nicht ignoriert ).quelle
.ebextensions
was dazu führte, dass die akzeptierte und beliebte Antwort fehlschlug. Ich habe nicht alles andere ausprobiert, was Sie erwähnt haben, aber danke für den Hinweis GabIch habe alle
.ebextensions
Methoden zum Hinzufügen von Konfigurationen auf Implementierungsebene ausprobiert und es hat mir im neuesten Amazon Linux AMI nicht geholfen. Ich habe viel recherchiert und nachdem ich die Protokolle durchgesehen habe, kann ich feststellen, dass der Runner der Bereitstellungsaufgabe.platform
jedes Mal nach einem Ordner mit dem Namen sucht, und ich dachte daran, einen Ordner wie die .ebextensions hinzuzufügen. Unten finden Sie die Einstellungen, die ich in meinem Stammordner meines Projekts vorgenommen habe.Fügen Sie das folgende Ordner-Setup in der Stammebene Ihres Projektordners hinzu.
Ordnerstruktur (.platform / nginx / conf.d / proxy.conf)
Inhalt von Datei 1 - proxy.conf ( Innenordner
.platform/nginx/conf.d/
)Inhalt der Datei 2 - 00_myconf.config (Innerhalb des
.platform/
Ordners)Sorgfältig mit den Verlängerungen umgehen. Die erste Datei ist .conf und die zweite Datei ist .config .
Stellen Sie Ihr Projekt nun erneut auf Amazon Elastic Beanstalk bereit und Sie werden die Magie sehen. Diese Konfiguration wird allen Ihren EC2-Instanzen hinzugefügt, die im Rahmen der automatischen Skalierung erstellt wurden.
Detaillierte Ordnerstruktur unten.
quelle
.ebextensions
und nur dieser Ansatz hat funktioniert.Dies ist die von AWS bereitgestellte Lösung und funktioniert (passen Sie die Größe an Ihre Bedürfnisse an).
quelle
Alternativ können Sie den Proxyserver in Apache ändern. Gehen Sie dazu zur Konfiguration und bearbeiten Sie die Softwarekonfiguration. Die erste Option hier ist "Proxyserver", wählen Sie "Apache".
quelle
LimitRequestBody
?Für Golang ohne Docker habe ich diese Anweisungen aus aws doc befolgt:
Ich habe die Datei
proxy.conf
im.ebextensions/nginx/conf.d/
Stammverzeichnis meines Projekts mit nur einer Zeile erstellt:Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass
.ebextensions
Ordner und Unterordner in Ihrer Bereitstellungs-Zip enthalten sind. Nginx muss nicht manuell neu gestartet werden.quelle
Ich hatte mit dem gleichen Problem zu kämpfen, konnte es aber nicht lösen, schließlich funktionierte es.
Hier ist meine Congfig-Datei.
Das Problem war,
Hier sind meine paar Cent,
quelle
Nachdem ich drei lange Tage lang versucht hatte, dieses Problem zu lösen, rief ich das erstaunliche AWS-Support-Team an und sie gaben mir einige Hinweise, wie ich es lösen könnte. Erstens ist mein Projekt in JAVA und ich verwende Maven und Spring Boot, um es durch Elastic Beanstalk (EBS) auszuführen.
Wie in der AWS-Dokumentation erläutert , müssen die benutzerdefinierten Nginx-Einstellungen in der Stammebene Ihres Projekts gespeichert sein. Dazu habe ich eine client_max_body_size.conf-Datei erstellt und in den folgenden Pfad eingefügt : myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Diese Datei enthält nur die folgende Zeile:
Konfigurieren Sie maven so, dass diese Datei während des Builds im Stammordner meines Projekts hinzugefügt wird. Dies war etwas schwierig, ich musste die folgende Konfiguration ( Quelle ) in meine POM.xml einfügen:
Sie können Ihr Projekt jetzt bereits lokal erstellen und den folgenden SSH-Befehl ausführen, um zu überprüfen, ob es sich tatsächlich im Stammverzeichnis Ihres Projekts befindet:
Jetzt ist es der schwierige Teil. Wenn Sie es auf EBS hochladen, sollte Ihre Datei nur die Datei SNAPSHOT.jar und den Ordner .ebextensions enthalten. Wenn Sie jetzt beispielsweise die JAR-Datei und den Ordner komprimieren und manuell hochladen, funktioniert dies!
Da ich Jenkins für meine Bereitstellung und insbesondere das AWS EBS Deployment Plugin verwende , müssen Sie die Einstellungen der Dateien / Ordner ändern, die Sie in die Bereitstellung aufnehmen. Aus irgendeinem Grund konnte ich den Ordner .ebextensions nicht einschließen, sodass ich nur alles andere außer dem Ordner und der JAR-Datei ausschloss.
Das funktioniert!
quelle
Für Java Platform
Um die NGINX-Konfigurations-Proxy-Datei zu erstellen, müssen Sie nur hinzufügen
.ebextension/nginx/conf.d/proxy.conf
Dateimit dem Inhalt
client_max_body_size 20M;
darin."proxy.conf" wird in "/etc/nginx/conf.d/proxy.conf" bereitgestellt und automatisch von der NGINX-Konfiguration aufgenommen.
quelle
Wenn Sie EC2 ausführen und nginx selbst installiert haben, ist es am besten, eine neue Datei in zu erstellen
Ordner:
und fügen Sie dort die folgende Zeile hinzu:
Speichern Sie dann nginx und starten Sie es neu:
quelle
Zusätzlich zu client_max_body_size musste ich client_body_buffer_size hinzufügen . Hier ist die Punktkonfigurationsdatei, die für einen 2-MB-Anhang funktioniert hat:
quelle