nginx keepalive_timeout 设置策略
来源:互联网 发布:中原网络办公 编辑:程序博客网 时间:2024/06/06 03:12
1.项目环境:nginx(前段代理,仅作代理用途)+3个tomcat(都在同一个服务器上),做的web项目
2.涉及到的业务逻辑:文件上传(可能有大文件,比如说Android游戏,100m);客户端接口请求;网站后台管理
3.问题重现流程:
3.1 配置好tomcat后,直接加上nginx前段代理(仅配置了http代理)
3.2 问题一:当管理员后台上传文件时,大文件无法上传成功,出现time-out,经重复测试,发现上传时间超过1分钟以后,就会返回超时信息,小文件没有问题
3.2 经调研得知nginx默认设置的http连接超时时间为75s,超过75s,会断掉当前的http连接,而大文件上传时经常会超过75s,这就导致大文件无法上传成功,当时的解决方案是,设置nginx http连接超时时间为30分钟,即参数keepalive_timeout=1800;文件上传问题基本解决;
3.4项目运行2天后,发现服务器突然宕机了,重启nginx可以解决问题,但是2个小时后又再次宕机,重启nginx又解决了问题,调研了一个中午,并且查看nginx的错误日志(socket() failed (24: Too many open files) while connecting to upstream),发现问题来源与nginx的连接数(设置的默认值为1024)达到上限
3.5发现这个问题后,我就想应该把nginx的连接数调大点,于是设置 worker_connections 10240;重启nginx,短时间没有出现问题,但是运行过程中,我再次查看错误日志,发现(socket() failed (24: Too many open files) while connecting to upstream)时不时的出现
3.6 此时发现调整nginx的连接数并不能完全解决问题,于是google,百度之,发现问题所在,罪魁祸首是:nginx的keepalive_timeout(参看http://fengzheng369.blog.163.com/blog/static/752209792012418103813580/ )设置项时间太长,客户端接口访问其实是一个比较快速的过程,访问完成了已经不需要继续使用http连接了,但是由于对nginx的错误配置,导致接口访问完成后http连接并没有被释放掉,所以导致连接数越来越大,最终nginx崩溃。
4.那么这个问题应该如何解决呢?
将keepalive_timeout时间调小会导致上传操作可能无法完成;调大点的话,许多无效的http连接占据着nginx的连接数
这貌似是一个两难的问题
先写到这,正在寻找解决方案
方案一:将接口请求,后台管理,文件上传这三个业务逻辑分开,nginx对这三种业务逻辑分开转发,每个业务逻辑单独设置一个keepalive-timeout(未实验)
- nginx keepalive_timeout 设置策略
- nginx keepalive_timeout 设置策略
- nginx学习随笔--keepalive_timeout
- Nginx的keepalive_timeout和TCP的keepalive
- nginx upstream 调度策略
- nginx负载均衡策略
- NGinx负载均衡策略
- Nginx负载均衡策略
- Nginx负载均衡策略
- Nginx负载均衡策略
- NGinx负载均衡策略
- NGinx负载均衡策略
- Nginx负载均衡策略
- nginx负载均衡策略
- Nginx多方位优化策略
- nginx负载均衡策略
- Nginx 配置集群策略
- Nginx负载均衡策略
- 2.2剑指offer的代码题-题2
- 几个与个税有关的Excel公式
- Ubuntu 下安装Beyond Compare
- 17.8.18B组总结
- HDU 6143 Killer Names(容斥)
- nginx keepalive_timeout 设置策略
- Java基础学习——网络编程
- CentOS6 安装代码检测工具sonarsource
- Spring Aop切面基于Xml的学习
- java-网站支付宝支付流程
- python (3) array 拼接
- ES6入门之set和map
- 通过金矿模型介绍动态规划
- JZOJsenior3456.【NOIP2013模拟联考3】恭介的法则(rule)