一:背景介绍
二:Nginx限制上传大小
1、Nginx官方文档说明
Syntax: client_max_body_size size; Default: client_max_body_size 1m; Context: http, server, location //设置客户端请求正文的最大允许大小,在“Content-Length”请求标头字段中指定。如果请求中的大小超过了配置的值,则会向客户端返回413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将大小设置为0将禁用客户端请求正文大小的检查。 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.
①client_max_body_size 用来修改允许客户端上传文件的大小。默认为1m,如果设置为0,表示上传文件大小不受限制。
②可以在以下模块设置: http, server, location
③client_max_body_size 10m;
2、设置参数
1)、在server模块中设置
server { listen 80; server_name localhost; #charset koi8-r; # client_max_body_size 用来修改允许客户端上传文件的大小。默认为1m,如果设置为0,表示上传文件大小不受限制。 # 可以在以下模块设置: http, server, location client_max_body_size 10m; # 访问 / 网站跟目录返回的内容 location / { root /usr/share/nginx/html; index index.html index.htm; } ... }
2)、在http模块中设置
http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; # 是否开启压缩功能 #gzip on; # client_max_body_size 用来修改允许客户端上传文件的大小。默认为1m,如果设置为0,表示上传文件大小不受限制。 # 可以在以下模块设置: http, server, location client_max_body_size 10m; # 引用配置文件 include /etc/nginx/conf.d/*.conf; }
3、结构说明
nginx配置结构分为三层http>server>location,层级越深配置优先级越高
http包含一到多个server,server包含一到多个location
配置项的优先级分别是location、server、http
http { ... access_log /var/logs/nginx/nginx.log; server { server_name A; ... access_log /var/logs/nginx/serverA/nginx.log; location / { ... access_log /var/logs/nginx/serverA/localtion/nginx.log; } location b { ... } } }
- 匹配到serverA,location /时日志会得到 /var/logs/nginx/serverA/location/nginx.log
- 匹配到serverA其他location时日志会记录到/var/logs/nginx/serverA/nginx.log
- 默认请求日志记录到 /var/logs/nginx/nginx.log
三:问题分析过程
针对于该案例出现的问题,最快的解决方式(临时解决方案)是:进行nginx大小的调整,调整为可上传条件的大小为止。而针对这种最快的解决方式做了分析。
出现问题的原因:
用有限的思维来思考的问题,只想当下如何解决这个问题,没有从根本上解决问题。以后还可能有其他的情况,如果直接改参数,那么每次都需要改,而其中存在的风险是未知的。
解决问题的方案
- 将大的任务拆分成小的任务,分批次完成
- 在前端做处理,分多次请求发往后端
四:总结
- 要对生产环境有敬畏之心
- 要用无限的思维(运动的、相对的、连续的)看待问题
- 做任何事情都要有二选三的思维模式
- 要用科学的方法(先确定边界、然后遍历、最后找出最优)来看待问题