Me encuentro con errores "413 Request Entity Too Large" al publicar archivos de más de 10 MB en nuestra API que se ejecuta en AWS Elastic Beanstalk.
He investigado bastante y creo que necesito aumentar el tamaño de client_max_body_size para Nginx, sin embargo, parece que no puedo encontrar ninguna documentación sobre cómo hacer esto usando Elastic Beanstalk. Supongo que debe modificarse utilizando un archivo de extensión.
¿Alguien tiene alguna idea sobre cómo puedo superar el límite? 10 MB es bastante débil, tiene que haber una forma de aumentar esto manualmente.
amazon-web-services
nginx
amazon-ec2
amazon-elastic-beanstalk
Nick Parsons
fuente
fuente
Respuestas:
Hay dos métodos que puede utilizar para ello. Desafortunadamente, algunos funcionan para algunos tipos de aplicaciones de EB y algunos funcionan para otros.
Compatible / recomendado en la documentación de AWS
Para algunos tipos de aplicaciones, como Java SE , Go , Node.js y tal vez Ruby (no está documentado para Ruby, pero todas las demás plataformas Nginx parecen admitir esto), Elasticbeanstalk tiene una comprensión incorporada de cómo configurar Nginx.
Para aumentar el tamaño máximo de carga específicamente, cree un archivo al
.ebextensions/nginx/conf.d/proxy.conf
establecer el tamaño máximo del cuerpo al tamaño que prefiera:Cree el archivo de configuración de Nginx directamente
Después de mucha investigación y horas de trabajo con el maravilloso equipo de soporte de AWS, creé un archivo de configuración dentro
.ebextensions
para complementar la configuración de nginx. Este cambio permitió un tamaño de cuerpo de poste más grande.Dentro del
.ebextensions
directorio, creé un archivo llamado01_files.config
con el siguiente contenido:Esto genera un archivo proxy.conf dentro del directorio /etc/nginx/conf.d. El archivo proxy.conf simplemente contiene la línea
client_max_body_size 20M;
que hace el truco.Tenga en cuenta que para algunas plataformas, este archivo se creará durante la implementación, pero luego se eliminará en una fase de implementación posterior.
Puede especificar otras directivas que se describen en la documentación de Nginx.
http://wiki.nginx.org/Configuration
¡Espero que esto ayude a otros!
fuente
2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.conf
. No estoy seguro, pero parecía que sería necesario reiniciar el servidor..ebextensions
que no esté en.ebignore
y.gitignore
🖖 No necesité reiniciar el servicio nginx,eb deploy
y funcionó 🎉Modificó la respuesta anterior por motivos de seguridad (y la sintaxis era incorrecta, vea, dos entradas 'propietario:' en el YAML), muchachos, no establezcan 777 permisos en NADA. A menos que le guste ser pirateado y establezca el propietario de los archivos de configuración de Nginx en root.
También vea la respuesta a continuación para hacer que nginx recoja este cambio después de la implementación.
fuente
EDITAR: después de haber implementado una compilación con las instrucciones en la respuesta aceptada por Nick Parsons, es posible que deba reiniciar el servidor nginx para recoger los cambios.
Para hacer esto, ssh a la instancia y haz
sudo service nginx reload
Para obtener más información sobre la recarga, consulte http://nginx.org/en/docs/beginners_guide.html .
En una versión anterior de Elastic Beanstalk, pude agregar un container_command para lograr esto, pero ahora encuentro, como @cdmckay, que esto causa una falla de implementación. Si reconstruye su entorno, recogerá la configuración de client_max_body_size y siempre que esa instrucción esté en su archivo de configuración.
fuente
La respuesta aceptada no funcionó para mí ya que tengo una aplicación basada en JVM y parece que la configuración de NGINX es diferente. Vería que se creaba un archivo proxy.conf durante la implementación, pero luego se eliminaba antes de que se completara la implementación. La documentación de AWS explica cómo configurar el proxy :
Cree un
.ebextensions/nginx/conf.d/proxy.conf
archivo que contenga solo la línea:client_max_body_size 40M;
fuente
/etc/nginx/conf.d/
Después de la respuesta aceptada, es posible que deba volver a cargar el archivo de configuración nginx.
Para hacer esto agregue el siguiente comando
Esta sería una mejor práctica que hacer ssh en su instancia eb y hacerlo manualmente con un comando.
Esto, combinado con la respuesta aceptada, resolvió el mismo problema para mí. (Rails, Puma, NGINX)
fuente
Lo único que funcionó para mí fue crear un archivo ".config" dentro de .ebextensions como este:
con solo este contenido en el archivo .config:
no hay necesidad de subcarpetas, no es necesario reiniciar el servidor de aplicaciones, preste atención a que es un archivo ".config" no ".conf" dentro de .ebextensions y el uso de la sangría adecuada para evitar errores en la consola aws, el resto es el mismo no importa el nombre del archivo,
gracias a: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
fuente
He probado todos los
.ebextensions
métodos para agregar la configuración del nivel de implementación y no me ayudó en la última AMI de Amazon Linux. He investigado mucho y, después de revisar los registros, puedo encontrar que el ejecutor de tareas de implementación está buscando una carpeta llamada.platform
cada vez y pensé en agregar una como .ebextensions. A continuación se muestra la configuración que hice en mi carpeta raíz de mi proyecto.Agregue la siguiente configuración de carpeta en el nivel raíz de la carpeta de su proyecto.
Estructura de carpetas (.platform / nginx / conf.d / proxy.conf)
Contenido del archivo 1: proxy.conf (
.platform/nginx/conf.d/
carpeta interior )Contenido del archivo 2 - 00_myconf.config (
.platform/
carpeta interior )Cuida bien las extensiones. El primer archivo es .conf y el segundo archivo es .config .
Ahora vuelva a implementar su proyecto en Amazon Elastic Beanstalk y verá la magia. Esta configuración se agregará a todas sus instancias EC2, creadas como parte del escalado automático.
Estructura de carpetas detallada a continuación.
fuente
.ebextensions
y solo este enfoque funcionó.La respuesta aceptada no funcionó para mí, así que anulé la configuración de nginx con la mía.
Creé un archivo llamado
nginx.conf
bajo el directorio.ebextensions/nginx/
Hice SSH en una instancia en ejecución de mi aplicación Beanstalk y copié el contenido del
nginx.conf
archivo, usandocat /etc/nginx/nginx.conf
y copiando desde la terminal.Pegué el contenido en el
nginx.conf
archivo que creé anteriormente.ebextensions/nginx/
y modifiqué la directiva http para incluirclient_max_body_size 50M;
. Finalmente volví a implementar mi aplicación usandoeb deploy
y funcionó. Debería recibir el siguiente mensaje durante la implementación:Estos son los contenidos de mi
.ebextensions/nginx/nginx.conf
archivo:No tuve que reiniciar el servicio nginx ni el entorno.
Nota : asegúrese de que su .ebextensions sea parte del archivo .zip creado y cargado en Beanstalk durante la implementación (no se ignora en
.gitignore
o.ebignore
si lo está usando).fuente
.ebextensions
que causó el fracaso de la respuesta popular y aceptada. No probé todo lo que mencionaste, pero gracias por la nota 🍻Esta es la solución proporcionada por AWS y funciona (ajuste el tamaño a sus necesidades)
fuente
Alternativamente, puede cambiar el servidor proxy a Apache. Para hacer esto, vaya a la Configuración y Edite la Configuración del Software. La primera opción aquí es "Servidor proxy", seleccione "apache".
fuente
LimitRequestBody
?Para Golang sin Docker, seguí estas instrucciones de aws doc:
Creé el archivo
proxy.conf
en.ebextensions/nginx/conf.d/
la raíz de mi proyecto, con solo 1 línea dentro:Si aún no funciona, asegúrese de que la
.ebextensions
carpeta y las subcarpetas estén incluidas en su zip de implementación. No es necesario reiniciar Nginx manualmente.fuente
Estaba luchando con el mismo problema pero no pude resolverlo, finalmente está funcionando.
aquí está mi archivo congfig,
El problema era
Aquí están mis pocos centavos
fuente
Después de 3 largos días tratando de resolver este problema, respondí a una llamada con el increíble equipo de soporte de AWS y me dieron algunas pistas sobre cómo resolverlo. Primero, mi proyecto está en JAVA y uso maven y spring boot para ejecutarlo a través de Elastic Beanstalk (EBS).
Como se explica en la documentación de AWS , debe tener la configuración nginx personalizada almacenada en el nivel raíz de su proyecto. Para hacer eso, he creado un archivo client_max_body_size.conf y lo coloqué en la siguiente ruta: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf Este archivo contiene solo la siguiente línea:
Configure maven para agregar este archivo en la carpeta raíz de mi proyecto durante la compilación. Esto fue un poco complicado, necesitaba agregar la siguiente configuración ( fuente ) en mi POM.xml:
Ahora ya puede construir su proyecto localmente y ejecutar el siguiente comando SSH para validar que realmente se encuentra en la raíz de su proyecto:
Ahora es la parte complicada. Cuando lo sube a EBS, su archivo debe contener solo el archivo SNAPSHOT.jar y la carpeta .ebextensions. Por ejemplo, si ahora comprime el archivo jar y la carpeta y los carga manualmente, ¡funcionará!
Dado que estoy usando Jenkins para mi implementación, y específicamente el complemento de implementación de AWS EBS , debe cambiar la configuración de los archivos / carpetas que incluye en la implementación. Ahora, por alguna razón, no pude incluir la carpeta .ebextensions, así que excluí todo lo demás, excepto la carpeta y el archivo .jar.
¡Esto funciona!
fuente
Además de client_max_body_size, tuve que agregar client_body_buffer_size . Aquí está el archivo de configuración de puntos que funcionó, para un archivo adjunto de 2 MB:
fuente
Para la plataforma Java
Para crear el archivo proxy de configuración de NGINX, solo debe agregar
.ebextension/nginx/conf.d/proxy.conf
expedientecon el contenido
client_max_body_size 20M;
en él."proxy.conf" se implementará en "/etc/nginx/conf.d/proxy.conf" y se incluirá automáticamente en la configuración de NGINX.
fuente
Si está ejecutando EC2 e instaló nginx usted mismo, su mejor solución es crear un nuevo archivo en
carpeta:
y luego agregue la siguiente línea allí:
luego guarde y reinicie nginx:
fuente