项目实战典型案例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. 秉持二选二 二选三思维
目录
相关文章
|
缓存 前端开发 应用服务中间件
|
5月前
|
负载均衡 Java 应用服务中间件
|
11月前
|
应用服务中间件 nginx
nginx中handle模块的编写小案例
nginx中handle模块的编写小案例
nginx中handle模块的编写小案例
|
弹性计算 专有云 应用服务中间件
nginx在云平台服务几个典型代理场景中的应用案例
在云平台服务中有多种场景需要使用到反向代理,常见的应用场景包括:内网专有云平台访问公网资源、公有云平台访问客户内网IDC机房资源、云产品通过代理访问多个不同的资源等等。笔者总结几种场景配置nginx的7层反向代理、4层反向代理,巧妙实现应用需求。
nginx在云平台服务几个典型代理场景中的应用案例
|
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的示例。
171 0
|
缓存 NoSQL 应用服务中间件
|
14天前
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
204 84
终极 Nginx 配置指南(全网最详细)
|
2天前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
13 4
|
2天前
|
缓存 应用服务中间件 nginx
nginx如何配置?配置项都是什么意思?
nginx如何配置?配置项都是什么意思?
12 1
|
6天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
下一篇
无影云桌面