Nginx: 413 – Request Entity Too Large Error and Solution

See all UNIX related articles/faq
I‘m running nginx as a frond end to php based Apache+mod_fastcgi server. My app lets user upload images upto 2MB in size. When users trying to upload 1.5MB+ size image file using nginx reverse proxy, they are getting the following error on screen:
Nginx 413 Request Entity Too Large
How do I fix this problem and allow image upload upto 2MB in size using nginx web-server working in reverse proxy or stand-alone mode on Unix like operating systems?

Tutorial details
Difficulty level Easy
Root privileges Yes
Requirements Linux or Unix terminal
Category Web Server
Prerequisites Nginx Server
OS compatibility AIX AlmaLinux Alpine Arch BSD Debian Fedora FreeBSD HP-UX Linux macOS Mint NetBSD OpenBSD openSUSE Pop!_OS RHEL Rocky Stream SUSE Ubuntu Unix WSL
Est. reading time 3 minutes
The error “413 – Request Entity Too Large” indicates that web server configured to restrict large file size. Nginx can be set to allow the maximum size of the client request body using client_max_body_size directive. If the size of a request exceeds the configured value, the 413 (Request Entity Too Large) error returned to the client. You will see an error as follows:
Fig.01: 413 - Request Entity Too Large When I am Trying To Upload A File

Fig.01: 413 – Request Entity Too Large When I am Trying To Upload A File

You need to configure both nginx and php to allow upload size.
Advertisement

Nginx configuration

To fix this issue edit your nginx.conf. Open the Terminal or login to the remote server using ssh client. Type the following command to edit your nginx.conf using a text editor such as vi or joe or nano:
# vi /etc/nginx/nginx.conf
Use nano text editor:
$ sudo nano /etc/nginx/nginx.conf
Must be run as root:
# vi /usr/local/nginx/conf/nginx.conf
Add the following line to http or server or location context to increase the size limit in nginx.conf, enter:

# set client body size to 2M #
client_max_body_size 2M;

If you need 100MB then:

# set client body size to 100 MB #
client_max_body_size 100M;

The client_max_body_size directive assigns the maximum accepted body size of client request, indicated by the line Content-Length in the header of request. If size is greater the given one, then the client gets the error “Request Entity Too Large” (413). Save and close the file by pressing the ZZ when using vim as a text edtior. Reload the nginx webserver, enter:
# /usr/local/nginx/sbin/nginx -s reload
Use nginx itself to reload it:
# /sbin/nginx -s reload
For RHEL/CentOS/Debian/Ubuntu Linux, try:
# service nginx reload
If you are using systemd based system run:
$ sudo systemctl reload nginx.service

PHP configuration (optional)

Your php installation also put limits on upload file size. Edit php.ini and set the following directives

;This sets the maximum amount of memory in bytes that a script is allowed to allocate
memory_limit = 32M

;The maximum size of an uploaded file.
upload_max_filesize = 2M

;Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize
post_max_size = 3M

If you are using PHP-FPM, restart it as follows:
$ sudo systemctl restart php-fpm
## OR ##
$ sudo systemctl restart php7.0-fpm.service
## OR ##
$ sudo /usr/local/etc/rc.d/php-fpm restart

Save and close the file. Make sure you reload/restart back-end apache or nginx web server as per your setup. See “PHP Increase Upload File Size Limit” tutorial for more information.

Look out for permission errors too

Apart from setting Nginx and PHP, you need to look out file permission errors. Usually logged into your web server error.log file. Here is a sample error logged in to my lighttpd web server:

2017-07-18 07:09:18: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-9UMUXj Permission denied 
2017-07-18 07:23:45: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-a4PNg1 Permission denied 
2017-07-18 07:25:50: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-xIzdjU Permission denied 
2017-07-18 07:27:30: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-2s3I9J Permission denied 
2017-07-18 07:29:04: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-9KNsVa Permission denied 
2017-07-18 07:30:19: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-myoWrl Permission denied

To fix this you need to setup correct permission using the chmod command or chown command:
$ sudo chown -R lighttpd:lighttpd /var/cache/lighttpd/
See also Fix client intended to send too large body: xyz bytes in Nginx.

This entry is 1 of 4 in the Common Nginx Errors and Fix Tutorial series. Keep reading the rest of the series:
  1. Nginx: 413 - Request Entity Too Large Error and Solution
  2. Fix client intended to send too large body: xyz bytes in Nginx
  3. Nginx: 24: Too Many Open Files Error And Solution
  4. Upstream sent too big header while reading response header from upstream

🥺 Was this helpful? Please add a comment to show your appreciation or feedback.

nixCrat Tux Pixel Penguin
Hi! 🤠
I'm Vivek Gite, and I write about Linux, macOS, Unix, IT, programming, infosec, and open source. Subscribe to my RSS feed or email newsletter for updates.

52 comments… add one
  • Kiran Sep 16, 2022 @ 20:26

    Thank you, Mota Bhai. It was indeed very useful page to get rid of “413 Request Entity Too Large file upload issues” for my app :)

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Your comment will appear only after approval by the site admin.