170

I have been getting the nginx error:

413 Request Entity Too Large

I have been able to update my client_max_body_size in the server section of my nginx.conf file to 20M and this has fixed the issue. However, what is the default nginx client_max_body_size?

atw
  • 5,428
  • 10
  • 39
  • 63

6 Answers6

219

The default value for client_max_body_size directive is 1 MiB.

It can be set in http, server and location context — as in the most cases, this directive in a nested block takes precedence over the same directive in the ancestors blocks.

Excerpt from the ngx_http_core_module documentation:

Syntax:   client_max_body_size size;
Default:  client_max_body_size 1m;
Context:  http, server, location

Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.

Don't forget to reload configuration by nginx -s reload or service nginx reload commands prepending with sudo (if any).

ruvim
  • 7,151
  • 2
  • 27
  • 36
  • 6
    Coming in late to note that you should use `nginx -t` to test your configuration before running `nginx -s reload` to apply the configuration changes. It can't guarantee your configuration is correct, but it will catch syntax errors or invalid values. – kungphu Mar 05 '18 at 21:42
  • 5
    Yes, but in any case, `nginx -s reload` will not apply a syntactically incorrect configuration but will report error. – ruvim Mar 06 '18 at 23:05
  • What is the *maximum* value that Nginx supports for this directive? There's nothing in the docs. [Apache supports 2GB max](https://httpd.apache.org/docs/2.4/mod/core.html#limitrequestbody). – Dan Dascalescu May 06 '19 at 02:10
  • 1
    @DanDascalescu, the maximum value depends on `off_t` type size (see [`ngx_http_core_module.h`](https://github.com/nginx/nginx/blob/master/src/http/ngx_http_core_module.h)). In the case of 64-bit executable [`off_t` size is 64 bit](https://stackoverflow.com/questions/9073667/where-to-find-the-complete-definition-of-off-t-type#answer-14351239), and the max value should be 2^63 bytes. – ruvim May 08 '19 at 22:48
  • @ruvim according to my testing, it should really be `MiB` (not MB), but do you have a documentation reference for that please ? :-) thank you **others PHP:** note that it has to be a slightly bigger than PHP `post_max_size` & `upload_max_filesize` since body size is not just the file but other body text parts too. – jave.web Jul 19 '22 at 10:03
  • @jave.web, if you mean 1024 vs 1000 multiplier, then in the context of RAM the term "megabyte" is often incorrectly used instead of the term "mebibyte". And the nginx documentation is not an exclusion, — see [measurement units](https://nginx.org/en/docs/syntax.html) and the corresponding [source code](https://github.com/nginx/nginx/blob/release-1.23.1/src/core/ngx_parse.c#L13). – ruvim Sep 05 '22 at 15:48
38

Nginx default value for client_max_body_size is 1MB

You can update this value by three different way

1. Set in http block which affects all server blocks (virtual hosts).

http {
    ...
    client_max_body_size 100M;
}

2. Set in server block, which affects a particular site/app.

server {
    ...
    client_max_body_size 100M;
}

3. Set in location block, which affects a particular directory (uploads) under a site/app.

location /uploads {
    ...
    client_max_body_size 100M;
}

For more info click here

Emdadul Sawon
  • 5,730
  • 3
  • 45
  • 48
30

Pooja Mane's answer worked for me, but I had to put the client_max_body_size variable inside of http section.

enter image description here

Aleksei Mialkin
  • 2,257
  • 1
  • 28
  • 26
24

You can increase body size in nginx configuration file as

sudo nano /etc/nginx/nginx.conf

client_max_body_size 100M;

Restart nginx to apply the changes.

sudo service nginx restart

Community
  • 1
  • 1
Pooja Mane
  • 477
  • 3
  • 5
3

You have to increase client_max_body_size in nginx.conf file. This is the basic step. But if your backend laravel then you have to do some changes in the php.ini file as well. It depends on your backend. Below I mentioned file location and condition name.

sudo vim /etc/nginx/nginx.conf.

After open the file adds this into HTTP section.

client_max_body_size 100M;
-1

This works for the new AWS Linux 2 environment. To fix this - you need to wrap your configuration file. You should have, if you're using Docker, a zip file (mine is called deploy.zip) that contains your Dockerrun.aws.json. If you don't - it's rather easy to modify, just zip your deploy via zip -r deploy.zip Dockerrun.aws.json

With that - you now need to add a .platform folder as follows:

APP ROOT
├── Dockerfile
├── Dockerrun.aws.json
├── .platform
│   └── nginx
│       └── conf.d
│           └── custom.conf

You can name your custom.conf whatever you want, and can have as many files as you want. Inside custom.conf, you simply need to place the following inside

client_max_body_size 50M;

Or whatever you want for your config. With that - modify your zip to now be

zip -r deploy.zip Dockerrun.aws.json .platform

And deploy. Your Nginx server will now respect the new command

More details here: https://blog.benthem.io/2022/04/05/modifying-nginx-settings-on-elasticbeanstalk-with-docker.html

NickB
  • 7
  • 1