nginx keepalive_timeout 设置策略

原文地址:http://lixiangfeng.com/blog/article/content/7982719

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连接了,但是由于对nginx的错误配置,导致接口访问完成后http连接并没有被释放掉,所以导致连接数越来越大,最终nginx崩溃。

4.那么这个问题应该如何解决呢?

将keepalive_timeout时间调小会导致上传操作可能无法完成;调大点的话,许多无效的http连接占据着nginx的连接数

这貌似是一个两难的问题

先写到这,正在寻找解决方案

方案一:将接口请求,后台管理,文件上传这三个业务逻辑分开,nginx对这三种业务逻辑分开转发,每个业务逻辑单独设置一个keepalive-timeout(未实验)

时间: 2024-10-13 11:59:57

nginx keepalive_timeout 设置策略的相关文章

nginx 负载均衡策略

nginx 负载均衡策略 1. 轮询 轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如: upstream backend {server backend1.example.com;server backend2.example.com;} 这种情况是每个server都使用相同的权重,默认值为1 可以手动设定权重,例如 upstream backend {server backend1.example.com weight=5;server backend

Apache/nginx转发设置-分布式部署(转)

转自http://blog.csdn.net/fujianianhua/article/details/8062234 Apache转发设置 1.  Weblogic安装 Weblogic8和Weblogic10默认安装,选择完全安装即可,如果是Weblogic9则选择自定义安装,勾选WebService plugin 2.apache服务器安装 安装说明详见文档<Apache服务器搭建说明.doc> 版本对应关系: Weblogic版本   Apache版本 weblogic8     Ap

centOS7 安装 nginx并设置开机自动启动

nginx 不像java 解压配置就行,nginx需要编译运行才能安装好,可以参考以下步骤 cd /home mkdir service mkdir log mkdir conf mkdir www mkdir -p /home/conf/nginx mkdir -p /home/conf/redis mkdir -p /home/conf/tomcat mkdir -p /home/log/nginx mkdir -p /home/log/redis mkdir -p /home/log/to

Windows Server2003安全设置策略

Windows Server2003安全设置策略一.Windows Server2003的安装 1.安装系统最少两需要个分区,分区格式都采用NTFS格式 2.在断开网络的情况安装好2003系统   3.安装IIS,仅安装必要的 IIS 组件(禁用不需要的如FTP 和 SMTP 服务).默认情况下,IIS服务没有安装,在添加/删除Win组件中选择"应用程序服务器",然后点击"详细信息",双击Internet信息服务(iis),勾选以下选项: Internet 信息服务

Drupal Nginx伪静态设置方法

location ~ ^.*/files\/styles\/.*$ { access_log off; expires 45d; error_page 404 @drupal; } location @drupal { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } } # Drupal Rewrite location / { root /path/to/drupal; index index.php i

服务器返回503(IIS Service Unavailable HTTP Error 503. The service is unavailable.)+IIS常见优化设置策略

一.服务器返回503,问题排查步骤(IIS下) 出现503错误,一般是由于IIS常出现问题,可从以下几个方面进行排查 1.打开IIS,看下具体的应用程序池是否正常,如果应用程序池中该应用状态是停止,则需要重新启动. 如果手动点击启动不了,直接以管理员身份运行cmd命令行窗口,先输入 iisreset /stop ,执行完之后,再输入 iisreset /start.则可解决. 但是这只是启动了服务,我们还要找到造成这种503 的根源. 先在任务管理器中,找到该程序的进程,看下资源占用是否正常.

nginx安全设置

Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器.它运行在UNIX,GNU /linux,BSD 各种版本,Mac OS X,Solaris和Windows.根据调查统计,6%的网站使用Nginx Web服务器.Nginx是少数能处理C10K问题的服务器之一.跟传统的服务器不同,Nginx不依赖线程来处理请求.相反,它使用了更多的可扩展的事 件驱动(异步)架构.Nginx为一些高流量的网站提供动力,比如WordPress,人人网,腾讯,网易等.这篇

nginx缓存设置

一.静态缓存 目的:缓存nginx服务器的静态文件.如css,js,htm,html,jpg,gif,png,flv,swf,这些文件都不是经常更新.便于缓存以减轻服务器的压力. 实现:nginx proxy_cache可以将用户的请缓存到本地一个目录,当下一个请求时可以直接调取缓存文件,就不用去后端服务器去取文件了. 配置:打开配置文件/usr/local/nginx/conf/nginx.conf user www www; worker_processes 2; error_log /va

nginx 并发设置

一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). 2.  worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一个进程分配到