`
498320858
  • 浏览: 392275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

nginx keepalive_timeout 设置策略

阅读更多

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(未实验)

 

 

 

分享到:
评论
4 楼 fs_plane 2014-09-01  
博主已经提出解决方案了啊, 已经过实践,方案可行
单独一个nginx对文件上传进行转发
3 楼 wuqinjiayou 2014-08-22  
有什么解决方案  我也遇到同样的问题
2 楼 changqingonly 2014-06-17  
兄弟,等你下文呢,怎么没了。你采用哪种方案解决的,碰到什么问题吗
1 楼 windy0605 2013-11-28  
...

相关推荐

    Nginx的超时timeout配置详解

    本文介绍 Nginx 的 超时(timeout)配置。分享给大家,具体如下: Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 ...

    Nginx timeout超时配置详解

    在Nginx中,`keepalive_timeout`指令用于设置保持TCP连接的时间。当服务器和客户端之间完成一次交互式请求后,服务器保持连接打开状态一定时间,这段时间内如果有新的请求到来,将复用这个连接。如果在这段时间内...

    Nginx安装+nginx_upstream_check_module后端健康检查

    keepalive_timeout 60; # 连接超时时间 open_file_cache max=102400 inactive=20s; # 打开文件缓存 open_file_cache_valid 30s; access_log logs/access.log main; sendfile on; fastcgi_connect_timeout 300;...

    nginx.config_nginx_

    这里`include`指令用于引入其他配置文件,`default_type`定义默认MIME类型,`sendfile`启用高效文件传输,`keepalive_timeout`设置客户端保持连接的超时时间。 4. **server块** - `server`块定义了一个监听特定...

    详解Nginx中HTTP的keepalive相关配置

    默认情况下,Nginx对客户端的keepalive_timeout值设置为65秒。对于后端服务器,Nginx使用keepalive_timeout来控制与后端服务器的TCP连接保持时间,这有助于减少因后端资源不可用而导致的超时。 例如,Nginx配置如下...

    服务器端nginx配置文件

    keepalive_timeout 65; #配置共享会话缓存大小 ssl_session_cache shared:SSL:10m; #配置会话超时时间 ssl_session_timeout 10m; #最大数据长度 client_max_body_size 200m; #引入配置 include ./...

    详解Nginx服务器中配置超时时间的方法

    4. **keepalive_timeout**: 这个参数设置的是与客户端保持长连接的超时时间。默认值为75秒,你可以设置为更长的时间,如600秒,以便在处理大量短连接请求时减少连接开销。 5. **proxy_connect_timeout**: 定义Nginx...

    nginx1.9.7+keepalive1.3.2

    3. 配置 Nginx:编写 Nginx 配置文件,定义后端服务器池,设置 Keepalive 参数,如 `keepalive_timeout`(决定连接多久保持活动)和 `keepalive_requests`(允许多少个请求复用同一连接)。 4. 高可用性设置:配置...

    Nginx超时设置.docx

    - **keepalive_timeout**:用于设置与客户端的 keep-alive 连接的超时时间。这个时间之后,连接会被关闭。此外,还可以设置第二个参数,用来控制响应头中的 `Keep-Alive` 值。需要注意的是,不同的浏览器对 `Keep-...

    nginx系列(八)nginx失效转移与超时处理

    Nginx提供了多种超时设置,包括`client_body_timeout`、`client_header_timeout`、`proxy_read_timeout`等,用来控制不同阶段的超时行为。例如: ```nginx http { server { location / { client_body_timeout ...

    nginx keepalive的具体使用

    keepalive_timeout: 服务器端保持连接的超时时间。 ``` 在nginx配置文件中设置keepalive相关参数,可以对长连接的管理做进一步优化,例如: ``` http { ... keepalive_requests 100; keepalive_timeout 65; ... ...

    nginx自己_nginx_

    keepalive_timeout 65; # 客户端保持活动连接的时间 } ``` 以上是关于Nginx的基本配置和使用的详细介绍,通过理解和掌握这些知识,你可以灵活地配置和管理Nginx服务器,满足各种Web服务需求。记得在修改配置后,...

    nginx配置优化+负载均衡+动静分离详解.zip_nginx_nginx 负载_优化_优化配置_负载均衡

    3. **keepalive_timeout**:设置客户端与服务器保持空闲连接的时间,避免频繁创建和销毁连接。 4. **sendfile**:启用或禁用sendfile特性,用于快速传输文件,提高文件下载速度。 5. **tcp_nodelay** 和 **tcp_no...

    nginx.conf.txt

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;...#pid logs/nginx.pid;... #keepalive_timeout 0; keepalive_timeout 65;

    nginx配置教程

    #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]."; #设定请求缓冲 client_header_buffer_size 128k; large_client_header_buffers 4 ...

    Windows下Nginx的安装与配置

    default_type用于设置默认的文件类型,log_format用于设置日志格式,access_log用于设置访问日志,sendfile用于设置是否启用sendfile功能,keepalive_timeout用于设置keepalive超时时间。 在server部分,我们可以...

    Nginx性能优化指南

    - `keepalive_timeout`:设置客户端维持空闲连接的时间。 - `keepalive_requests`:定义一个连接可处理的最大请求数量。 - **命令示例**: ```nginx keepalive_timeout 65; keepalive_requests 100000; ``` *...

    nginx-upstream-check-module-master.zip

    Default: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp Context: upstream 该指令可以打开后端服务器的健康检查功能。指令后面的参数意义是: interval:向...

Global site tag (gtag.js) - Google Analytics