首先我们要修改php相关的一些配置来完成上传文件时大小的限制。
file_uploads = on ;
是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_max_filesize = 8m ;
允许上传文件大小的最大值。默认为2M
post_max_size = 8m ;
通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M
如果 POST 数据尺寸大于 post_max_size
$_POST
和 $_FILES
superglobals
便会为空.
一般地,在网络正常的情况下,设置好上述三个参数后,上传<=8M的文件是不成问题。但如果要上传>8M的大体积文件,只设置上述三项不一定能行的通。
max_execution_time = 30 ;
每个PHP页面运行的最大时间值(秒),默认30秒。
超过30秒,该脚本就停止执行,这样就会出现无法打开网页的情况
max_input_time = 60 ;
每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;
每个PHP页面所吃掉的最大内存,默认8M
修改 nginx.conf 文件nginx对上传文件大小是有限制的,解决方法是修补nginx相对应的配置文件。
client_max_body_size 50m; //文件大小限制,默认1m
client_header_timeout 1m;
client_body_timeout 1m;
proxy_connect_timeout 60s;
proxy_read_timeout 1m;
proxy_send_timeout 1m;
每个参数的意思:
client_max_body_size
限制请求体的大小,若超过所设定的大小,返回413错误。
client_header_timeout
读取请求头的超时时间,若超过所设定的大小,返回408错误。
client_body_timeout
读取请求实体的超时时间,若超过所设定的大小,返回413错误。
proxy_connect_timeout
http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。
proxy_read_timeout
http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒。
proxy_send_timeout
http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。
nginx错误:413 Request Entiry Too Large
client_max_body_size
用于设置客户端 Request body
(请求体)的大小上限,要上传的文件就在 body
体 中,所以此参数可以间接的看做是对文件上传大小的限制。
nginx 服务器通过请求头的 Content-Length
确定 body
体的大小。超过设置的上限会返回错误码 413 Request Entity Too Large
,将此参数设置为 0 可以取消对长度的限制。
Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location
client_max_body_size
可以设置在 http
、server
、location
块中,所以我们可以对域名甚至一个请求地址来提高上传包的大小值。
修改/usr/local/nginx/conf/nginx.conf
文件,查找 client_max_body_size
将后面的值设置为你想设置的值。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /home/www/admin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/admin$fastcgi_script_name;
include fastcgi_params;
client_max_body_size 35m; #客户端上传文件大小设为35M
client_body_temp_path /home/www/nginx_temp; #设置临时目录
}
附录:Nginx有一个Upload组件:
upload_limit_rate 158k # 上传速率
如下:
location /upload {
upload_pass /up.php;
upload_cleanup 400 404 499 500-505;
#upload_store /data/app/test.local/upload_tmp;
upload_store /tmp;
upload_store_access user:r;
client_max_body_size 1024M;
upload_limit_rate 158k;
upload_set_form_field "${upload_field_name}_name" $upload_file_name;
upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
upload_pass_form_field "^.*$";
#upload_pass_form_field "^pid$|^tags$|^categoryid$|^title$|^userid$|^user_id$|^is_original$|^upload_file_name$|^upload_file_content_type$|^upload_file_path$|^upload_file_md5$|^upload_file_size$";
}