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 的 超时(timeout)配置。分享给大家,具体如下: Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 ...
client_body_timeout 3m; send_timeout 3m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65;
理解了下nginx 所有timeout相关的配置,如下: keepalive_timeout HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个...
#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;
#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 ...
keepalive_timeout 65; #配置共享会话缓存大小 ssl_session_cache shared:SSL:10m; #配置会话超时时间 ssl_session_timeout 10m; #最大数据长度 client_max_body_size 200m; #引入配置 include ./...
Default: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp Context: upstream 该指令可以打开后端服务器的健康检查功能。指令后面的参数意义是: interval:向...
最近排查一个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
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 模块 一个对 nginx 有 lua 支持的 tcp 模块。 大多数代码是从 ngx-lua-module 复制而来的,并且指令/常量/APIs 计划与 ngx-lua ... lua_socket_keepalive_timeout lua_socket_connect_timeout lua_s
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;
keepalive_timeout 65; sqlite_database test.db; server { listen 80; server_name localhost; location /sqlite { sqlite_query "select * from test;"; } } } ``` 标签...
主要介绍了Nginx中HTTP的keepalive相关配置,以及Nginx的Httpd守护进程相关的keepalive timeout配置,需要的朋友可以参考下
#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_...
#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; ...
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配置适配器 这是Caddy的,可将转换为Caddy的本机格式。 该项目尚未完成,我们... keepalive_timeout ntlm minimum_conn 随机的 地点: 地点 如果 根 add_header 否定 允许 改写 fastcgi_pass proxy_pa
REDIS_KEEPALIVE_MAX_IDLE_TIMEOUT MAX_PATH_LENGTH SESSION_LENGTH 插件 DEFAULT_SCORE 如果您希望进行进一步的自定义,例如添加自定义插件或使用自定义 nginx conf 文件,最好使用它作为基础滚动
前言 近期写个小demo,因为用到某大厂的在线数据,接口做了跨域限制,所以利用Nginx... keepalive_timeout 120; #gzip压缩开关及相关配置 gzip on; gzip_min_length 1k; gzip_buffers 4 32k; gzip_http_version
keepalived+nginx双机热备+负载均衡 非抢占模式,支持虚拟IP切换,tomcat负载均衡配置等服务,可以动态自动切换