Nginx file upload error - too big file - php

i have nginx on centOS distro. Everything is configured to upload files fine for me..
in etc/php.ini (dont know why on centos this file is in root of etc but its working) i have upload_max_filesize 60M, client_max_body_size 80M and post_max_size 80M.
Other files like nginx server configuration have these upload directives too.
But when I'm uploading a 1mb file nginx is erroring 413 Request Entity Too Large.
My web app is showing that server have 60mb file limit like info.php file.
I did a reboot, nginx reload, restart, php reload.
I have checked everything on stackoverflow and net to fix this but nothing helped.
Nginx logs: Nginx is showing that user is trying to upload bigger file than limit.
There is a pdf of my info.php file: http://docdro.id/YAylJcO

Have you edited your nginx.conf.
Add client_max_body_size xxM inside the server section, where xx is the size (in megabytes) that you want to allow.

By default, nginx is configured to allow a client maximum body size of 1MB. The files you are uploading (~8MB) are larger than 1MB, which is why the 413 (Request Entity Too Large) error is being returned.
To fix this issue, simply edit nginx.conf and add a client_max_body_size configuration like so:
######################
# HTTP server
######################
server {
...
listen 80;
server_name xxxx.com;
client_max_body_size 20M;
...
}
If you have HTTPS configured as well, be sure to add client_max_body_size there as well:
######################
# HTTPS server
######################
server {
...
listen 443 default_server ssl;
server_name xxxx.com;
client_max_body_size 20M;
...
}
reload your server and you should be good!
[server]$ sudo service nginx reload
More info on client_max_body_size here: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
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.

Related

PHP AWS Elastic Beanstalk - Cannot post file more than 2GB

I have deployed an application in Elastic Beanstalk, changed some configuration so that I can upload larger files and restart nginx server.
When I upload one file less than 2 GB, it is uploaded successfully. However, when I upload a file more than 2 GB, it does not upload successfully. Below are the lines that I have added in /etc/nginx/nginx.conf file:
client_max_body_size 7500M;
proxy_connect_timeout 1200s;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
fastcgi_send_timeout 1200s;
fastcgi_read_timeout 1200s;
Also, I have added config file in .ebextensions and put in the following content:
files:
"/etc/php.d/99uploadsize.ini":
mode: "000644"
owner: root
group: root
content: |
post_max_size = 5000M
upload_max_filesize = 5000M
memory_limit = 5000M
commands:
remove_old_ini:
command: "rm -f /etc/php.d/99uploadsize.ini.bak"
and also tried the following content:
files:
"/etc/nginx/conf.d/proxy.conf":
mode: "000755"
owner: root
group: root
content: |
post_max_size = 7500M
upload_max_filesize = 5000M
memory_limit = 7500M
client_max_body_size = 5000M
Here is the phpinfo() snapshot:
Where am I going wrong? Kindly assist me
PHP Settings
Your PHP Settings are absolute correct are there is no error is the settings.
Uploading Error Not PHP
As per you picture posted the Error Code i.e. 7 which means
UPLOAD_ERR_CANT_WRITE - 7; Failed to write file to disk. Introduced in PHP 5.1.0
It means you uploading code is correct but at the time of writing the file on the system it is failed.
Apache Settings
LimitRequestBody
This directive specifies the number of bytes from 0 (meaning unlimited) to 2147483647 (2GB) that are allowed in a request body.
The LimitRequestBody directive allows the user to set a limit on the allowed size of an HTTP request message body within the context in which the directive is given (server, per-directory, per-file or per-location). If the client request exceeds that limit, the server will return an error response instead of servicing the request. The size of a normal request message body will vary greatly depending on the nature of the resource and the methods allowed on that resource. CGI scripts typically use the message body for retrieving form information. Implementations of the PUT method will require a value at least as large as any representation that the server wishes to accept for that resource.
This directive gives the server administrator greater control over abnormal client request behavior, which may be useful for avoiding some forms of denial-of-service attacks.
Solution:
You cannot post/upload the file through PHP more than 2 GB as Apache server will not let it do it.
The Only solution through is that you can zip it and while doing zip split the file less then 2 GB per file and then unzip them, to server which each request.
Run the script to unzip the file and do things.

Nginx, PHP and centos7 error 413-request-entity-too-large when connect to different network

My web system (Laravel) had 2 domain which company.test.hero (which can only be access by my company network) and example.com (which point to company.test.hero and can be access by public)
The problem is when I want to upload file, if I connect to my company network I can upload file without problem.
But if I connect with other network, it will give Error 413-request-entity-too-large (I try to upload file size 2.86mb).
I already setting NGINX upload limit in folder etc>nginx>nginx.conf
client_max_body_size 20M;
I also had set etc>php.ini upload limit.
upload_max_filesize = 20M
memory_limit = 256M
post_max_size 20M
Edit your NGiNX configuration file (usually /etc/nginx/nginx.conf) and add this line into the http section:
http {
client_max_body_size 100M;
}
Note: Don't use MB, use only M or it will not work!
Also do not forget to restart nginx:
systemctl restart nginx

Large File Uploads (> 4GB) with nginx and php-fpm

I am trying to upload large files with nginx and php-fpm and my own PHP script.
For files larger than 4 GB the PHP upload fails. I get a HTTP 200 response with my error message from PHP.
print_r($_FILES) shows me:
[file] => Array
(
[name] => foo.dat
[type] =>
[tmp_name] =>
[error] => 3
[size] => 0
)
According to http://php.net/manual/en/features.file-upload.errors.php error 3 means:
UPLOAD_ERR_PARTIAL
Value: 3;
The uploaded file was only partially uploaded.
All the data gets sent to nginx and yet php says "size=0".
I tried the upload in an HTML form and as XMLHttpRequest with Google Chrome and Firefox, as well as with a little upload program in Java. So an error on the client side or the connection is unlikely.
According to Chrome Network Inspector all data gets sent correctly, the content length in the request header is correct. After the data is sent I get the server response within 5 seconds, so a timeout is unlikely.
My nginx configuration:
client_max_body_size 8000m;
client_body_buffer_size 512k;
fastcgi_buffers 512 32k;
fastcgi_busy_buffers_size 128k;
fastcgi_buffer_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_max_temp_file_size 0;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 18000;
fastcgi_read_timeout 1800;
And the php.ini for the php-fpm instance:
upload_max_filesize = 8000M
post_max_size = 8000M
max_input_time = 1800
max_execution_time = 300
memory_limit = 512M
;upload_tmp_dir = // not specified, which means system default according to the php docs. That's /tmp on my machine
The nginx and php-fpm error log say nothing about this. I have restarted nginx and php-fpm multiple times already.
I am running nginx/1.6.0 with php 5.5.11 on Debian 6 64bit.
I will test this on a 2nd server now since I'm thinking the issue might be with Debian and outside of nginx/php-fpm.
Any ideas how to debug this further?
UPDATE 1:
There is enough disk space. To test for partition and/or permission problems I just created an upload folder under
a) the same mount point as the web root
b) and with the same user as php-fpm is running
so simply: upload_tmp_dir = /home/myuser/upload
and I restarted php-fpm
The problem is still the same, I get an HTTP 200 with php error=3 for the file upload. Smaller files can be uploaded and appear temporarily in the new temp folder.
FIX
After updating to the latest php 5.6 version the error is gone. I am using the same php.ini file with that version, so it's probably a changed default setting or a fixed bug in php.

413 Request Entity Too Large

I use nginX/1.6 and laravel when i posted data to server i get this error 413 Request Entity Too Large. i tried many solutions as bellow
1- set client_max_body_size 100m; in server and location and http in nginx.conf.
2- set upload_max_filesize = 100m in php.ini
3- set post_max_size = 100m in php.ini
After restarting php5-fpm and nginx the problem still not solved
Add ‘client_max_body_size xxM’ inside the http section in /etc/nginx/nginx.conf, where xx is the size (in megabytes) that you want to allow.
http {
client_max_body_size 20M;
}
I had the same issue but in docker. when I faced this issue, added client_max_body_size 120M; to my Nginx server configuration,
nginx default configuration file path is /etc/nginx/conf.d/default.conf
server {
client_max_body_size 120M;
...
it resizes max body size to 120 megabytes. pay attention to where you put client_max_body_size, because it effects on its scope. for example if you put client_max_body_size in a location scope, only the location scope will be effected with.
after that, I did add these three lines to my PHP docker file
RUN echo "max_file_uploads=100" >> /usr/local/etc/php/conf.d/docker-php-ext-max_file_uploads.ini
RUN echo "post_max_size=120M" >> /usr/local/etc/php/conf.d/docker-php-ext-post_max_size.ini
RUN echo "upload_max_filesize=120M" >> /usr/local/etc/php/conf.d/docker-php-ext-upload_max_filesize.ini
since docker PHP image automatically includes all setting files from the path (/usr/local/etc/php/conf.d/) into php.ini file, PHP configuration file will change by these three lines and the issue must disappear
I am using Docker and PHP 7.4 and I faced this issue too.
Just added a line to the file *.conf inside docker/php74/ directory.
server {
client_max_body_size 100M;
...
}

nginx 413 request entity too large when up[loading more than 1Mb file

I am trying to post a file bigger than 1 mb and i get this Nginx error.
I have changed client_max_body_size 500M in nginx.conf and post_max_size=500M
upload_max_filesize=500M in php.ini.
Try restart/reload both nginx and PHP to load the new configuration.

Categories