`
498320858
  • 浏览: 386399 次
  • 性别: 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配置文件祥解

    client_body_timeout 3m; send_timeout 3m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65;

    Nginx timeout超时配置详解

    理解了下nginx 所有timeout相关的配置,如下: keepalive_timeout HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个...

    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 ...

    服务器端nginx配置文件

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

    nginx_upstream_check_module-master.zip

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

    记一次nginx中proxy_pass的使用问题

    最近排查一个web服务的问题,webserver使用的nginx,最终发现是踩了nginx中proxy_pass... keepalive_timeout 5; charset utf-8; include /home/ligang/devspace/gobox-demo/conf/http/general/gzip.conf; access_lo

    嵌入Python脚本的Nginx模块ngx_python.zip

     keepalive_timeout 65;  server {  listen 80;  server_name localhost;    location /content_by_python {  content_by_python " import ngx ngx.echo('Hello, ngx_python')  ";  } ...

    nginx-tcp-lua-module:基于Nginx的带lua支持的TCP服务器

    nginx tcp lua 模块 一个对 nginx 有 lua 支持的 tcp 模块。 大多数代码是从 ngx-lua-module 复制而来的,并且指令/常量/APIs 计划与 ngx-lua ... lua_socket_keepalive_timeout lua_socket_connect_timeout lua_s

    nginx.conf

    user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; ... worker_connections 1024;... keepalive_timeout 65;  #gzip on;  include /etc/nginx/conf.d/*.conf;

    Nginx的SQLite模块ngx_sqlite.zip

     keepalive_timeout 65;  sqlite_database test.db;  server {  listen 80;  server_name localhost;  location /sqlite {  sqlite_query "select * from test;";  }  } } ``` 标签...

    详解Nginx中HTTP的keepalive相关配置

    主要介绍了Nginx中HTTP的keepalive相关配置,以及Nginx的Httpd守护进程相关的keepalive timeout配置,需要的朋友可以参考下

    nginx 1.9 window 版本

    #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_...

    Nginx+Tomcat负载均衡

    #keepalive_timeout 75 20; include gzip.conf; upstream localhost { #ip_hash #ip_hash; server localhost:8081; server localhost:8080; } server { listen 80; server_name localhost; ...

    nginx的php模块ngx_php.zip

     keepalive_timeout 65;    client_max_body_size 10m;  client_body_buffer_size 4096k;  php_ini_path /usr/local/php/etc/php.ini;  server {  listen 80;  server_name localhost;    location /...

    nginx-adapter:使用NGINX配置运行Caddy

    球童NGINX配置适配器 这是Caddy的,可将转换为Caddy的本机格式。 该项目尚未完成,我们... keepalive_timeout ntlm minimum_conn 随机的 地点: 地点 如果 根 add_header 否定 允许 改写 fastcgi_pass proxy_pa

    docker-redx:构建redx容器的Docker配置

    REDIS_KEEPALIVE_MAX_IDLE_TIMEOUT MAX_PATH_LENGTH SESSION_LENGTH 插件 DEFAULT_SCORE 如果您希望进行进一步的自定义,例如添加自定义插件或使用自定义 nginx conf 文件,最好使用它作为基础滚动

    Nginx代理axios请求以及注意事项详解

    前言 近期写个小demo,因为用到某大厂的在线数据,接口做了跨域限制,所以利用Nginx... keepalive_timeout 120; #gzip压缩开关及相关配置 gzip on; gzip_min_length 1k; gzip_buffers 4 32k; gzip_http_version

    keepalived+nginx双机热备+负载均衡 非抢占模式

    keepalived+nginx双机热备+负载均衡 非抢占模式,支持虚拟IP切换,tomcat负载均衡配置等服务,可以动态自动切换

Global site tag (gtag.js) - Google Analytics