Biegnę do „413 Zbyt duże żądanie” błędów podczas wysyłania plików większych niż 10 MB do naszego API działa na AWS Elastic Beanstalk.
Zrobiłem sporo badań i uważam, że muszę zwiększyć client_max_body_size dla Nginx, jednak nie mogę znaleźć żadnej dokumentacji, jak to zrobić za pomocą Elastic Beanstalk. Domyślam się, że należy go zmodyfikować za pomocą pliku ebetension.
Czy ktoś myśli o tym, jak mogę podnieść limit? 10 MB jest dość słabe, musi być sposób na ręczne zwiększenie tego.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
źródło
źródło
Odpowiedzi:
Możesz skorzystać z dwóch metod. Niestety niektóre działają z niektórymi typami aplikacji EB, a niektóre z innymi.
Obsługiwane / zalecane w dokumentacji AWS
W przypadku niektórych typów aplikacji, takich jak Java SE , Go , Node.js i może Ruby (nie jest to udokumentowane dla Ruby, ale wszystkie inne platformy Nginx wydają się to obsługiwać), Elasticbeanstalk ma wbudowaną wiedzę o tym, jak skonfigurować Nginx.
Aby szczególnie zwiększyć maksymalny rozmiar przesyłanych plików, utwórz plik,
.ebextensions/nginx/conf.d/proxy.conf
ustawiając maksymalny rozmiar treści na dowolny preferowany rozmiar:Utwórz bezpośrednio plik konfiguracyjny Nginx
Po wielu badaniach i godzinach pracy ze wspaniałym zespołem wsparcia AWS, utworzyłem plik konfiguracyjny wewnątrz programu,
.ebextensions
aby uzupełnić konfigurację nginx. Ta zmiana pozwoliła na większy rozmiar ciała posta.Wewnątrz
.ebextensions
katalogu utworzyłem plik o nazwie01_files.config
o następującej zawartości:Spowoduje to wygenerowanie pliku proxy.conf w katalogu /etc/nginx/conf.d. Plik proxy.conf zawiera po prostu jedną linijkę,
client_max_body_size 20M;
która załatwia sprawę .Należy pamiętać, że w przypadku niektórych platform ten plik zostanie utworzony podczas wdrażania, a następnie usunięty w późniejszej fazie wdrażania.
Możesz określić inne dyrektywy, które są opisane w dokumentacji Nginx.
http://wiki.nginx.org/Configuration
Mam nadzieję, że to pomoże innym!
źródło
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Nie jestem pewien, ale wydawało się, że ponowne uruchomienie serwera może być konieczne.Zmodyfikowałem powyższą odpowiedź ze względu na bezpieczeństwo (a składnia była zła, widzicie, dwa wpisy „właściciel:” w YAML), chłopaki, proszę nie ustawiajcie 777 uprawnień na NIC. Chyba że lubisz być zhakowany i ustaw właściciela plików konfiguracyjnych Nginx na roota.
Zobacz również poniższą odpowiedź, aby nginx odebrać tę zmianę po wdrożeniu.
źródło
EDYCJA: Po wdrożeniu kompilacji z instrukcjami zawartymi w zaakceptowanej odpowiedzi Nicka Parsonsa, może być konieczne ponowne uruchomienie serwera nginx, aby pobrać zmiany.
Aby to zrobić, ssh do instancji i wykonaj
sudo service nginx reload
Więcej informacji na temat ponownego ładowania można znaleźć pod adresem http://nginx.org/en/docs/beginners_guide.html .
W poprzedniej wersji Elastic Beanstalk mogłem dodać container_command, aby to osiągnąć, ale teraz stwierdzam, jak @cdmckay, że powoduje to niepowodzenie wdrażania. Jeśli przebudujesz swoje środowisko, pobierze ono ustawienia client_max_body_size, a także tak długo, jak ta instrukcja będzie w twoim pliku konfiguracyjnym.
źródło
Zaakceptowana odpowiedź nie zadziałała dla mnie, ponieważ mam aplikację opartą na JVM i wydaje się, że konfiguracja NGINX jest inna. Widziałbym plik proxy.conf tworzony podczas wdrażania, ale później usuwany przed zakończeniem wdrażania. Dokumentacja AWS wyjaśnia, jak skonfigurować proxy :
Utwórz
.ebextensions/nginx/conf.d/proxy.conf
plik zawierający tylko linię:client_max_body_size 40M;
źródło
/etc/nginx/conf.d/
Kontynuując zaakceptowaną odpowiedź, może być konieczne ponowne załadowanie pliku konfiguracyjnego nginx.
Aby to zrobić, dodaj następujące polecenie
To byłaby lepsza praktyka niż wejście do instancji eb przez ssh i robienie tego ręcznie za pomocą polecenia.
To w połączeniu z zaakceptowaną odpowiedzią rozwiązało ten sam problem. (Szyny, Puma, NGINX)
źródło
Wypróbowałem wszystkie
.ebextensions
metody dodawania konfiguracji na poziomie implementacji i nie pomogło mi to w najnowszym Amazon Linux AMI. Zrobiłem wiele badań i po przejrzeniu dzienników mogę znaleźć program uruchamiający zadania wdrażania, który szuka folderu o nazwie.platform
za każdym razem i pomyślałem o dodaniu go, podobnie jak .ebextensions. Poniżej znajdują się ustawienia, które zrobiłem w folderze głównym mojego projektu.Dodaj poniższą konfigurację folderu na poziomie głównym folderu projektu.
Struktura folderów (.platform / nginx / conf.d / proxy.conf)
Zawartość pliku 1 - proxy.conf (
.platform/nginx/conf.d/
folder wewnętrzny )Zawartość pliku 2 - 00_myconf.config (
.platform/
folder wewnętrzny )Uważaj na rozszerzenia. Pierwszy plik to .conf, a drugi to .config .
Teraz prześlij swój projekt do Amazon Elastic Beanstalk, a zobaczysz magię. Ta konfiguracja zostanie dodana do wszystkich instancji EC2, utworzonych w ramach automatycznego skalowania.
Szczegółowa struktura folderów poniżej.
źródło
.ebextensions
i tylko to podejście zadziałało.Jedyną rzeczą, która zadziałała, było utworzenie pliku „.config” wewnątrz .ebextensions w następujący sposób:
tylko z tą zawartością w pliku .config:
nie ma potrzeby tworzenia podfolderów, nie ma potrzeby restartowania serwera aplikacji, zwróć uwagę, że plik ".config" a nie ".conf" wewnątrz .ebextensions i zastosowanie odpowiedniego wcięcia, aby uniknąć błędów w konsoli aws reszta jest taka sama nie ma znaczenia nazwa pliku,
dzięki: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
źródło
Zaakceptowana odpowiedź nie zadziałała dla mnie, więc zamiast tego zastąpiłem konfigurację nginx własną.
Utworzyłem plik o nazwie
nginx.conf
w katalogu.ebextensions/nginx/
Skorzystałem z działającej instancji mojej aplikacji Beanstalk i skopiowałem zawartość
nginx.conf
pliku, używająccat /etc/nginx/nginx.conf
i kopiując z terminala.Wkleiłem zawartość do
nginx.conf
pliku, który wcześniej utworzyłem.ebextensions/nginx/
, i zmodyfikowałem dyrektywę http, aby uwzględnićclient_max_body_size 50M;
. W końcu ponownie wdrożyłem moją aplikację przy użyciueb deploy
i zadziałało. Podczas wdrażania powinien pojawić się następujący komunikat:Oto zawartość mojego
.ebextensions/nginx/nginx.conf
pliku:Nie musiałem ponownie uruchamiać usługi nginx ani środowiska.
Uwaga : upewnij się, że rozszerzenie .ebextensions jest częścią pliku .zip utworzonego i przesłanego do Beanstalk podczas wdrażania (nie jest ignorowane w programie
.gitignore
lub.ebignore
jeśli go używasz).źródło
.ebextensions
co spowodowało, że zaakceptowana i popularna odpowiedź zawiodła. Nie próbowałem wszystkiego innego, o czym wspomniałeś, ale dzięki za notatkę 🍻To jest rozwiązanie dostarczone przez AWS i działa (dostosuj rozmiar do swoich potrzeb)
źródło
Alternatywnie możesz zmienić serwer proxy na Apache. Aby to zrobić, przejdź do Konfiguracja i Edytuj konfigurację oprogramowania. Pierwsza opcja to „Serwer proxy”, wybierz „apache”.
źródło
LimitRequestBody
?W przypadku Golanga bez Dockera postępowałem zgodnie z instrukcjami z dokumentu aws:
Utworzyłem plik
proxy.conf
w.ebextensions/nginx/conf.d/
katalogu głównym mojego projektu, mając po prostu jedną linię w środku:Jeśli nadal nie działa, upewnij się, że
.ebextensions
folder i podfoldery są uwzględnione w pliku ZIP wdrożenia. Nie ma potrzeby ręcznego ponownego uruchamiania Nginx.źródło
Zmagałem się z tym samym problemem, ale nie byłem w stanie go rozwiązać, w końcu zadziałało.
tutaj jest mój plik konfiguracyjny,
Problem polegał na
Oto moje kilka centów,
źródło
Po 3 długich dniach próbowania tego rozwiązania, zadzwoniłem do niesamowitego zespołu wsparcia AWS i dali mi kilka wskazówek, jak to rozwiązać. Po pierwsze, mój projekt jest w JAVA i używam Maven i Spring Boot, aby uruchomić go przez Elastic Beanstalk (EBS).
Jak wyjaśniono w dokumentacji AWS , musisz mieć niestandardowe ustawienia nginx przechowywane na poziomie głównym projektu. W tym celu utworzyłem plik client_max_body_size.conf i umieściłem go w następującej ścieżce: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Ten plik zawiera tylko następującą linię:
Skonfiguruj maven, aby dodać ten plik do folderu głównego mojego projektu podczas kompilacji. To było trochę trudne, musiałem dodać następującą konfigurację ( źródło ) w moim POM.xml:
Możesz już teraz skompilować projekt lokalnie i uruchomić następujące polecenie SSH, aby sprawdzić, czy faktycznie znajduje się w katalogu głównym projektu:
Teraz to trudna część. Po przesłaniu go do EBS plik powinien zawierać tylko plik SNAPSHOT.jar i folder .ebextensions. Na przykład, jeśli teraz spakujesz plik jar i folder i prześlesz go ręcznie, zadziała!
Ponieważ używam Jenkinsa do mojego wdrożenia, a konkretnie wtyczki AWS EBS Deployment - musisz zmienić ustawienia plików / folderów, które dołączasz do wdrożenia. Teraz z jakiegoś powodu nie mogłem dołączyć folderu .ebextensions, więc po prostu wykluczyłem wszystko inne oprócz folderu i pliku .jar.
To działa!
źródło
Oprócz client_max_body_size musiałem dodać client_body_buffer_size . Oto plik konfiguracyjny kropki, który działał, dla załącznika 2 MB:
źródło
Dla platformy Java
Aby utworzyć plik proxy konfiguracji NGINX, wystarczy dodać
.ebextension/nginx/conf.d/proxy.conf
plikz zawartością
client_max_body_size 20M;
.Plik „proxy.conf” zostanie wdrożony w „/etc/nginx/conf.d/proxy.conf” i automatycznie dołączony do konfiguracji NGINX.
źródło
Jeśli używasz EC2 i samodzielnie zainstalowałeś nginx, najlepszym rozwiązaniem jest utworzenie nowego pliku w formacie
teczka:
a następnie dodaj tam następujący wiersz:
następnie zapisz i uruchom ponownie nginx:
źródło