By default, NGINX® has a upload limit of 1 MB per file. By editing client_max_body_size, you adjust the file upload size. Use the http, server, or location block to edit client_max_body_size. Changes to the http block affect all server blocks (virtual hosts).
The default nginx configuration Below is the default Elastic Beanstalk nginx configuration which is located at /etc/nginx/nginx. conf for most of the distributions. The location of this file will vary depending on how you installed the software on your machine.
Your AWS Elastic Beanstalk environment includes an Auto Scaling group that manages the Amazon EC2 instances in your environment. In a single-instance environment, the Auto Scaling group ensures that there is always one instance running.
There are two methods you can take for this. Unfortunately some work for some EB application types and some work for others.
For some application types, like Java SE, Go, Node.js, and maybe Ruby (it's not documented for Ruby, but all the other Nginx platforms seem to support this), Elasticbeanstalk has a built-in understanding of how to configure Nginx.
To extend Elastic Beanstalk's default nginx configuration, add .conf configuration files to a folder named
.ebextensions/nginx/conf.d/
in your application source bundle. Elastic Beanstalk's nginx configuration includes .conf files in this folder automatically.
~/workspace/my-app/
|-- .ebextensions
| `-- nginx
| `-- conf.d
| `-- myconf.conf
`-- web.jar
Configuring the Reverse Proxy - Java SE
To increase the maximum upload size specifically, then create a file at .ebextensions/nginx/conf.d/proxy.conf
setting the max body size to whatever size you would prefer:
client_max_body_size 50M;
For some other application types, after much research and hours of working with the wonderful AWS support team, I created a config file inside of .ebextensions
to supplement the nginx config. This change allowed for a larger post body size.
Inside of the .ebextensions
directory, I created a file called 01_files.config
with the following contents:
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
This generates a proxy.conf file inside of the /etc/nginx/conf.d directory. The proxy.conf file simply contains the one liner client_max_body_size 20M;
which does the trick.
Note that for some platforms, this file will be created during the deploy, but then removed in a later deployment phase.
You can specify other directives which are outlined in Nginx documentation.
http://wiki.nginx.org/Configuration
Hope this helps others!
I have tried all .ebextensions
method of adding implementation level configuration and it didn't helped me in the latest Amazon Linux AMI. I have did a lot research and after going through the logs i can find the deployment task runner is checking for a folder called .platform
everytime and i thought of add one just like the .ebextensions. Below is the settings i have done in my root folder of my project.
Add the below folder setup in the root level of your project folder.
Folder structure (.platform/nginx/conf.d/proxy.conf)
.platform/
nginx/
conf.d/
proxy.conf
00_myconf.config
Content of File 1 - proxy.conf (Inside .platform/nginx/conf.d/
folder)
client_max_body_size 50M;
Content of File 2 - 00_myconf.config (Inside .platform/
folder)
container_commands:
01_reload_nginx:
command: "service nginx reload"
Care full with the extensions. First file is .conf and second file is .config.
Now redeploy your project to Amazon Elastic Beanstalk and you will see the magic. This configuration will be added to all your EC2 instances, created as part of auto scaling.
Detailed folder structure below.
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
Modified the above answer for the sake of security (and the syntax was wrong, see, two 'owner:' entries in the YAML), guys, please don't set 777 permissions on ANYTHING. Unless you enjoy being hacked, and set the owner of Nginx config files to root.
Also see the below answer to make nginx pickup this change after deployment.
The accepted answer is correct when you're using an older Elastic Beanstalk environment using Amazon Linux AMI. Newer Elastic Beanstalk environments use the Amazon Linux 2 AMI.
When using Amazon Linux 2 you need to specify the custom Nginx config in the .platform/
directory instead of the .ebextensions/
.
This means that you'll need to create the file .platform/nginx/conf.d/proxy.conf
with the content client_max_body_size 50M;
instead.
The .platform/
directory was also mentioned in another answer, but that still required reloading the Ngix config, with Amazon Linux 2 reloading is no longer needed.
You can find more options about this in the Extending Elastic Beanstalk Linux platforms documentation.
EDIT: After you've deployed a build with the instructions in the accepted answer by Nick Parsons, you may need to restart the nginx server to pick up the changes.
To do this, ssh to the instance and do
sudo service nginx reload
To learn more about reloading, see http://nginx.org/en/docs/beginners_guide.html.
In a previous version of Elastic Beanstalk, I was able to add a container_command to accomplish this, but now I am finding, like @cdmckay, that this causes a deployment failure. If you rebuild your environment it will pick up the client_max_body_size settings as well as long as that instruction is in your config file.
The accepted answer didn't work for me since I have a JVM-based app and it seems to do NGINX configuration differently. I would see a proxy.conf file being created during the deploy but then later deleted before the deploy was completed. AWS documentation explains how to configure the proxy:
Create an .ebextensions/nginx/conf.d/proxy.conf
file that contains just the line: client_max_body_size 40M;
Super Simple Solution for Amazon Linux 2:
This is based on AWS NGINX "Reverse proxy configuration" Documentation.
(This worked w/ Django 3.1.4 + Python 3.7 running on 64bit Amazon Linux 2/3.2.0)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With