amazon-web-services - aws - elastic beanstalk nginx config
Aumentando client_max_body_size en Nginx conf en AWS Elastic Beanstalk (9)
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".
Me estoy encontrando con errores de "413 entidades de solicitud demasiado grandes" al publicar archivos de más de 10 MB en nuestra API que se ejecuta en AWS Elastic Beanstalk.
He investigado un poco y creo que necesito aumentar el tamaño de la masa del cliente_max_body para Nginx, sin embargo, parece que no puedo encontrar ninguna documentación sobre cómo hacer esto usando Elastic Beanstalk. Mi suposición es que debe ser modificado usando un archivo ebetension.
¿Alguien tiene pensamientos sobre cómo puedo subir el límite? 10 MB es bastante débil, tiene que haber una manera de subir esto manualmente.
Después de la respuesta aceptada, es posible que necesite volver a cargar el archivo de configuración de nginx.
Para hacer esto agregue el siguiente comando
container_commands:
01_reload_nginx:
command: "service nginx reload"
Esta sería una mejor práctica que ingresar en su instancia de eb y hacerlo manualmente con un comando.
Esto combinado con la respuesta aceptada resolvió el mismo problema para mí. (Rieles, Puma, NGINX)
EDITAR: Después de que haya implementado una construcció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 hazlo
sudo service nginx reload
Para obtener más información sobre cómo volver a cargar, 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 estoy descubriendo, como @cdmckay, que esto causa una falla en la implementación. Si reconstruyes tu entorno, recuperará la configuración de client_max_body_size y siempre que esa instrucción esté en tu archivo de configuración.
Hay dos métodos que puede tomar para esto:
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 otras plataformas de Nginx parecen soportar esto), Elasticbeanstalk tiene una comprensión integrada de cómo configurar Nginx.
Para extender la configuración nginx predeterminada de Elastic Beanstalk, agregue archivos de configuración .conf a una carpeta llamada
.ebextensions/nginx/conf.d/
en el paquete fuente de la aplicación . La configuración nginx de Elastic Beanstalk incluye archivos .conf en esta carpeta automáticamente.
~/workspace/my-app/ |-- .ebextensions | `-- nginx | `-- conf.d | `-- myconf.conf `-- web.jar
Para aumentar el tamaño de carga máximo específicamente, cree un archivo en .ebextensions/nginx/conf.d/proxy.conf
configurando el tamaño máximo del cuerpo al tamaño que prefiera:
client_max_body_size 50M;
Crea 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 de .ebextensions
para modificar la configuración de nginx. Este cambio permitió un tamaño de cuerpo de poste más grande.
Dentro del directorio .ebextensions
, creé un archivo llamado 01_files.config
con los siguientes contenidos:
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
Esto genera un archivo proxy.conf dentro del directorio /etc/nginx/conf.d. El archivo proxy.conf simplemente contiene el liner 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!
La respuesta aceptada no funcionó para mí, así que en su lugar superé la configuración de nginx con la mía.
nginx.conf
un archivo llamado nginx.conf
bajo el directorio .ebextensions/nginx/
Hice una entrada SSH en una instancia en ejecución de mi aplicación Beanstalk, y copié el contenido del archivo nginx.conf
, usando cat /etc/nginx/nginx.conf
y copiando desde la terminal.
nginx.conf
los contenidos en el archivo nginx.conf
que creé previamente en .ebextensions/nginx/
y modifiqué la directiva http para incluir client_max_body_size 50M;
. Finalmente reimplegué mi aplicación usando eb deploy
y funcionó. Debería recibir el siguiente mensaje durante la implementación:
INFORMACIÓN: configuración de Nginx detectada en el directorio ''.ebextensions / nginx''. AWS Elastic Beanstalk ya no administrará la configuración de Nginx para este entorno.
Estos son los contenidos de mi .ebextensions/nginx/nginx.conf
:
# Elastic Beanstalk Nginx Configuration File
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33193;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ''$remote_addr - $remote_user [$time_local] "$request" ''
''$status $body_bytes_sent "$http_referer" ''
''"$http_user_agent" "$http_x_forwarded_for"'';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
client_max_body_size 50M;
}
No tuve que reiniciar el servicio nginx ni el entorno.
Nota : asegúrese de que sus .ebextensions formen parte del archivo .zip creado y cargado en Beanstalk durante la implementación (no se ignora en .gitignore
o .ebignore
si lo está usando).
La respuesta aceptada no funcionó porque tengo una aplicación basada en JVM y parece que la configuración de NGINX es diferente. Vería un archivo proxy.conf que se crea durante la implementación pero luego se elimina antes de que se complete la implementación. La documentación de AWS explica cómo configurar el proxy :
Cree un .ebextensions/nginx/conf.d/proxy.conf
que contenga solo la línea: client_max_body_size 40M;
Para Golang sin Docker, seguí estas instrucciones del documento de Aws:
Configurando el Proxy Inverso
Si desea incluir directivas además de las del bloque http nginx.conf, también puede proporcionar archivos de configuración adicionales en el
.ebextensions/nginx/conf.d/
de su paquete fuente. Todos los archivos en este directorio deben tener la extensión .conf. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html#go-complex-apps
proxy.conf
el archivo proxy.conf
en .ebextensions/nginx/conf.d/
en la raíz de mi proyecto, con solo 1 línea adentro:
client_max_body_size 20M;
Si aún no funciona, asegúrese de que la carpeta .ebextensions
y las subcarpetas estén incluidas en su zip de despliegue. No es necesario reiniciar Nginx manualmente.
Para la plataforma Java
Para crear el archivo proxy de configuración NGINX, solo debe agregar
.ebextension/nginx/conf.d/proxy.conf
con el contenido client_max_body_size 20M;
en eso.
"proxy.conf" se implementará en "/etc/nginx/conf.d/proxy.conf" y se incluirá automáticamente en la configuración de NGINX.
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
Modifiqué la respuesta anterior por razones de seguridad (y la sintaxis era incorrecta, vea, dos entradas ''propietario:'' en el YAML), muchachos, por favor no establezcan 777 permisos en NADA. A menos que disfrute de ser pirateado, y configure al propietario de los archivos de configuración de Nginx en la raíz.