项目实战典型案例28——生产环境nginx限制上传大小带来的灾难

简介: 项目实战典型案例28——生产环境nginx限制上传大小带来的灾难

生产环境nginx限制上传大小带来的灾难

一:背景介绍

本篇博客是对生产环境nginx限制上传大小带来的灾难进行的总结和进行的改进。

目的是将经历转变为自己的经验。通过博客的方式分享给大家,大家一起共同进步和提高。



二:思路&方案

对于在生产环境上调整nginx上传文件的大小是一个非常恐怖的方案:

1.首先由于是生产环境,很可能有用户正在进行使用,不管有没有改动成功,都需要重启nginx服务都会导致某一段时间内服务处于不可用的状态。

2.该方案,没有考虑到后续的变化,如果这次你调整到可以上传1.5w人的文档,如果下次我是2.5w人的文档你又怎么办呢?是不是又去修改nginx上传文件的大小。

方案

那是不是一定不可以修改nginx上传文件的大小呢,我认为也不是的。

上面的方案(直接修改nginx上传文件大小)没有考虑其他情况1. 现在修改nginx是否合适,优势利弊是什么? 2.有没有其他的更优的方案他们的优势利弊是什么?

解决生产环境nginx限制上传大小的方案

背景:现在生产环境的体测上面很可能有用户正在使用,但是现在学院又需要导入1.5w人对应的excel表格,但是由于nginx上进行了限制倒是1.5w条的excel导入失败。
1.不能影响线上用户的使用,于是我们可以进1.5w人的表格进行查人,分5批次进行导入,3000人表格进行导入。找到nginx能够接受最大人数的上传。

对于之后上传文件这里如何进行设计避免出现今天的情况

  1. 在设计之初考虑到今后的应用场景,事先设置nginx上传文件大小的限制,以及nginx接口超时时间
  2. 页面前端做上文文件大小的限制,如提示支持多大的文件上传,建议上传多大的文件。
  3. 后端可以做分批次导入excel表格的接口,可以利用多线程节省导入的时间。

三:Nginx上传文件大小配置

在nginx的配置文件nginx.conf中设置了上传文件的大小。

Nginx一般默认的上传最大请求体在1m。如果设置为0,表示上传文件大小不受限制。

Default: client_max_body_size 1m;

nginx支持在http块、server块和location块中设置client_max_body_size


三者的主要区别是:http{}中控制所用nginx收到的请求,server{}控制该server收到的请求报文大小;location{}只对匹配了location 路由规则的请求生效。


示例

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;
    #默认的上传最大请求体在1m。如果设置为0,表示上传文件大小不受限制。
    client_max_body_size 10m;  
    include /etc/nginx/conf.d/*.conf;
}

四:总结

  1. 对于问题的解决方案不能只想到一种解决方案,我们需要相处3中以上的解决方案,通过评估在当前环境下,哪一种方案更为合适。
  2. 秉持二选二 二选三思维
目录
相关文章
|
9月前
|
缓存 前端开发 应用服务中间件
|
2天前
|
负载均衡 Java 应用服务中间件
|
6月前
|
应用服务中间件 nginx
nginx中handle模块的编写小案例
nginx中handle模块的编写小案例
nginx中handle模块的编写小案例
|
9月前
|
NoSQL 关系型数据库 MySQL
云计算--Docker典型命令Docker run部署nginx\mysql\redis
云计算–Docker典型命令Docker run部署nginx\mysql\redis 上两章节分别介绍了Docker在Centos和Ubuntu上的安装方法,这次我们就来介绍一下docker常用命令之一的docker run,并且部署常用应用mysql、redis、nginx作为docker run的示例。
146 0
|
9月前
|
缓存 NoSQL 应用服务中间件
|
9月前
|
弹性计算 专有云 应用服务中间件
nginx在云平台服务几个典型代理场景中的应用案例
在云平台服务中有多种场景需要使用到反向代理,常见的应用场景包括:内网专有云平台访问公网资源、公有云平台访问客户内网IDC机房资源、云产品通过代理访问多个不同的资源等等。笔者总结几种场景配置nginx的7层反向代理、4层反向代理,巧妙实现应用需求。
nginx在云平台服务几个典型代理场景中的应用案例
|
9月前
|
数据采集 负载均衡 搜索推荐
Nginx负载均衡的详细配置及使用案例
Nginx负载均衡的详细配置及使用案例
|
2天前
|
移动开发 前端开发 JavaScript
前端vue2、vue3去掉url路由“ # ”号——nginx配置(一)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
60 0
|
2天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
25 0
|
2天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
64 0