Saya mengalami kesalahan "413 Permintaan Entitas Terlalu Besar" saat memposting file yang lebih besar dari 10MB ke API kami yang berjalan di AWS Elastic Beanstalk.
Saya telah melakukan sedikit penelitian dan percaya bahwa saya perlu menaikkan client_max_body_size untuk Nginx, namun saya tidak dapat menemukan dokumentasi apa pun tentang cara melakukan ini menggunakan Elastic Beanstalk. Dugaan saya adalah bahwa itu perlu dimodifikasi menggunakan file ebetension.
Adakah yang punya pemikiran tentang bagaimana saya bisa mencapai batas? 10MB cukup lemah, harus ada cara untuk meningkatkannya secara manual.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
sumber
sumber
Jawaban:
Ada dua metode yang dapat Anda lakukan untuk ini. Sayangnya beberapa bekerja untuk beberapa jenis aplikasi EB dan beberapa bekerja untuk yang lain.
Didukung / direkomendasikan dalam dokumentasi AWS
Untuk beberapa jenis aplikasi, seperti Java SE , Go , Node.js , dan mungkin Ruby (tidak didokumentasikan untuk Ruby, tetapi semua platform Nginx lainnya tampaknya mendukung ini), Elasticbeanstalk memiliki pemahaman bawaan tentang cara mengkonfigurasi Nginx.
Untuk meningkatkan ukuran unggahan maksimum secara khusus, kemudian buat file dengan
.ebextensions/nginx/conf.d/proxy.conf
menyetel ukuran tubuh maksimal ke ukuran yang Anda inginkan:Buat file konfigurasi Nginx secara langsung
Setelah banyak penelitian dan berjam-jam bekerja dengan tim dukungan AWS yang luar biasa, saya membuat file konfigurasi di dalamnya
.ebextensions
untuk melengkapi konfigurasi nginx. Perubahan ini memungkinkan untuk ukuran tubuh posting yang lebih besar.Di dalam
.ebextensions
direktori, saya membuat file bernama01_files.config
dengan konten berikut:Ini menghasilkan file proxy.conf di dalam direktori /etc/nginx/conf.d. File proxy.conf hanya berisi satu liner
client_max_body_size 20M;
yang melakukan trik.Perhatikan bahwa untuk beberapa platform, file ini akan dibuat selama penerapan, tetapi kemudian dihapus pada tahap penerapan selanjutnya.
Anda dapat menentukan arahan lain yang diuraikan dalam dokumentasi Nginx.
http://wiki.nginx.org/Configuration
Semoga ini bisa membantu orang lain!
sumber
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. Saya tidak yakin, tetapi sepertinya memulai ulang server mungkin perlu..ebextensions
tidak masuk.ebignore
dan.gitignore
🖖 Saya tidak perlu memulai ulang layanan nginx,eb deploy
dan berhasil 🎉Modifikasi jawaban di atas demi keamanan (dan sintaksnya salah, lihat, dua entri 'pemilik:' di YAML), kawan, tolong jangan tetapkan izin 777 pada APA SAJA. Kecuali jika Anda senang diretas, dan atur pemilik file konfigurasi Nginx ke root.
Juga lihat jawaban di bawah ini untuk membuat nginx pickup perubahan ini setelah penerapan.
sumber
EDIT: Setelah Anda menerapkan build dengan instruksi dalam jawaban yang diterima oleh Nick Parsons, Anda mungkin perlu memulai ulang server nginx untuk mengambil perubahan.
Untuk melakukan ini, ssh ke instance dan lakukan
sudo service nginx reload
Untuk mempelajari lebih lanjut tentang memuat ulang, lihat http://nginx.org/en/docs/beginners_guide.html .
Di versi Elastic Beanstalk sebelumnya, saya dapat menambahkan container_command untuk melakukannya, tetapi sekarang saya menemukan, seperti @cdmckay, bahwa hal ini menyebabkan kegagalan penerapan. Jika Anda membangun kembali lingkungan Anda, itu akan mengambil pengaturan client_max_body_size serta instruksi itu ada di file konfigurasi Anda.
sumber
Jawaban yang diterima tidak berfungsi untuk saya karena saya memiliki aplikasi berbasis JVM dan tampaknya melakukan konfigurasi NGINX secara berbeda. Saya akan melihat file proxy.conf sedang dibuat selama penerapan tetapi kemudian dihapus sebelum penerapan selesai. Dokumentasi AWS menjelaskan cara mengkonfigurasi proxy :
Buat
.ebextensions/nginx/conf.d/proxy.conf
file yang hanya berisi baris:client_max_body_size 40M;
sumber
/etc/nginx/conf.d/
Mengikuti dari jawaban yang diterima, Anda mungkin perlu memuat ulang file konfigurasi nginx.
Untuk melakukan ini tambahkan perintah berikut
Ini akan menjadi praktik yang lebih baik daripada melakukan ssh'ing ke dalam instance eb Anda dan melakukannya secara manual dengan sebuah perintah.
Ini dikombinasikan dengan jawaban yang diterima memecahkan masalah yang sama untuk saya. (Rel, Puma, NGINX)
sumber
Satu-satunya hal yang berhasil bagi saya adalah membuat file ".config" di dalam .ebextensions seperti ini:
dengan hanya konten ini di file .config:
tidak perlu subfolder, tidak perlu me-restart server aplikasi, perhatikan bahwa file ".config" bukan ".conf" di dalam .ebextensions dan penggunaan lekukan yang tepat untuk menghindari kesalahan di konsol aws, sisanya sama tidak peduli nama filenya,
terima kasih kepada: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
sumber
Saya telah mencoba semua
.ebextensions
metode untuk menambahkan konfigurasi level implementasi dan itu tidak membantu saya di AMI Amazon Linux terbaru. Saya telah melakukan banyak penelitian dan setelah melalui log saya dapat menemukan pelari tugas penyebaran sedang memeriksa folder yang disebut.platform
setiap kali dan saya berpikir untuk menambahkan satu seperti ekstensi. Di bawah ini adalah pengaturan yang telah saya lakukan di folder root proyek saya.Tambahkan pengaturan folder di bawah ini di tingkat root folder proyek Anda.
Struktur folder (.platform / nginx / conf.d / proxy.conf)
Isi File 1 - proxy.conf (Di dalam
.platform/nginx/conf.d/
folder)Isi File 2 - 00_myconf.config (Di dalam
.platform/
folder)Hati-hati dengan ekstensi. File pertama adalah .conf dan file kedua adalah .config .
Sekarang gunakan ulang proyek Anda ke Amazon Elastic Beanstalk dan Anda akan melihat keajaibannya. Konfigurasi ini akan ditambahkan ke semua instans EC2 Anda, yang dibuat sebagai bagian dari penskalaan otomatis.
Struktur folder terperinci di bawah.
sumber
.ebextensions
dan hanya pendekatan ini yang berhasil.Jawaban yang diterima tidak berhasil untuk saya, jadi saya mengganti konfigurasi nginx dengan milik saya sendiri.
Saya membuat file bernama di
nginx.conf
bawah direktori.ebextensions/nginx/
Saya melakukan SSH ke instance yang sedang berjalan dari aplikasi Pohon Kacang saya, dan menyalin konten
nginx.conf
file, menggunakancat /etc/nginx/nginx.conf
dan menyalin dari terminal.Saya menempelkan konten ke dalam
nginx.conf
file yang saya buat sebelumnya.ebextensions/nginx/
, dan memodifikasi direktif http untuk disertakanclient_max_body_size 50M;
. Saya akhirnya menerapkan ulang aplikasi saya menggunakaneb deploy
dan berhasil. Anda harus mendapatkan pesan berikut selama penerapan:Ini adalah isi dari my
.ebextensions/nginx/nginx.conf
file :Saya tidak perlu memulai ulang layanan nginx atau lingkungan.
Catatan : Pastikan .ebextensions Anda adalah bagian dari file .zip yang dibuat dan diunggah ke Beanstalk selama penerapan (tidak diabaikan di
.gitignore
atau.ebignore
jika Anda menggunakannya).sumber
.ebextensions
yang menyebabkan jawaban yang diterima dan populer gagal. Saya tidak mencoba semua hal lain yang Anda sebutkan, tetapi terima kasih atas catatannya 🍻Ini adalah solusi yang disediakan AWS , dan berfungsi (sesuaikan ukurannya dengan kebutuhan Anda)
sumber
Atau Anda dapat mengubah server proxy ke Apache. Untuk melakukan ini, buka Konfigurasi dan Edit Konfigurasi Perangkat Lunak. Opsi pertama di sini adalah "Server proxy", pilih "apache".
sumber
LimitRequestBody
?Untuk Golang tanpa Docker saya mengikuti instruksi ini dari aws doc:
Saya membuat file
proxy.conf
di.ebextensions/nginx/conf.d/
root proyek saya, hanya dengan 1 baris di dalamnya:Jika masih tidak berhasil, pastikan
.ebextensions
folder dan sub-folder disertakan dalam zip penerapan Anda. Tidak perlu memulai ulang Nginx secara manual.sumber
Saya berjuang dengan masalah yang sama tetapi tidak dapat menyelesaikannya, akhirnya berhasil.
ini file konfigurasi saya,
Masalahnya adalah,
Ini beberapa sen saya,
sumber
Setelah 3 hari yang panjang mencoba mencari tahu yang satu ini, saya langsung menelepon tim dukungan AWS yang luar biasa dan mereka memberi saya beberapa petunjuk tentang cara menyelesaikannya. Pertama, proyek saya ada di JAVA dan saya menggunakan maven dan boot musim semi untuk menjalankannya melalui Elastic Beanstalk (EBS).
Seperti yang dijelaskan di dokumentasi AWS , Anda perlu memiliki pengaturan nginx khusus yang disimpan di tingkat root proyek Anda. Untuk melakukan itu, saya telah membuat file client_max_body_size.conf dan meletakkannya di jalur berikut: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf File ini hanya berisi baris berikut:
Konfigurasikan maven untuk menambahkan file ini di folder root proyek saya selama pembuatan. Ini agak rumit, saya perlu menambahkan konfigurasi berikut ( sumber ) di POM.xml saya:
Sekarang Anda sudah dapat membangun proyek Anda secara lokal dan menjalankan perintah SSH berikut untuk memvalidasinya sebenarnya terletak di root proyek Anda:
Sekarang bagian yang sulit. Saat Anda mengunggahnya ke EBS, file Anda harus berisi hanya file SNAPSHOT.jar dan folder .ebextensions. Misalnya, jika sekarang Anda akan membuat zip file jar dan foldernya dan mengunggahnya secara manual, itu akan berhasil!
Karena saya menggunakan Jenkins untuk penerapan saya, dan khususnya AWS EBS Deployment Plugin - Anda perlu mengubah pengaturan file / folder yang Anda sertakan dalam penerapan. Sekarang untuk beberapa alasan saya tidak dapat menyertakan folder .ebextensions jadi saya hanya mengecualikan yang lainnya kecuali folder dan file .jar.
Ini bekerja!
sumber
Selain client_max_body_size, saya harus menambahkan client_body_buffer_size . Berikut adalah file konfigurasi titik yang berfungsi, untuk lampiran 2 MB:
sumber
Untuk Platform Java
Untuk membuat file proxy konfigurasi NGINX, Anda harus menambahkan
.ebextension/nginx/conf.d/proxy.conf
mengajukandengan konten
client_max_body_size 20M;
di dalamnya."proxy.conf" akan diterapkan ke "/etc/nginx/conf.d/proxy.conf" dan secara otomatis disertakan oleh konfigurasi NGINX.
sumber
Jika Anda menjalankan EC2 dan menginstal nginx sendiri, solusi terbaik Anda adalah membuat file baru di
map:
dan kemudian tambahkan baris berikut di sana:
lalu simpan dan mulai ulang nginx:
sumber