http {
  keepalive_timeout 20; --长连接timeout
keepalive_requests 8192; --每个连接最大请求数
}
events {
worker_connections 102400;
}

转:http://bert82503.iteye.com/blog/2152613

先说说服务为什么使用HTTPs长连接技术?有如下几个原因:
对响应时间要求较高;
服务走的是公网,客户端与服务端的TCP建立的三次握手和断开的四次握手都需要40ms左右(真实数据包计算出来的),共需要80ms左右;
每个接入方使用的IP就若干个,需要建立的请求连接有限。
使用长连接技术,可以大幅减少TCP频繁握手的次数,极大提高响应时间;同时,即使使用长连接技术,也不需要消耗很多的系统资源用来缓存sockets会话信息。 以下是在自己电脑上验证三者之间的长连接请求,连接存活时间都为5min。
【环境】
操作系统:Ubuntu 14.04 LTS
Nginx:1.6.2
Tomcat:7.0.51
JDK:1.7.0_51
Client:HttpClient 4.3.5 【相关配置】
1. Nginx - 反向代理
nginx.conf:
http {
... ##
# 与Client连接的长连接配置
##
# http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
# 设置通过"一个存活长连接"送达的最大请求数(默认是100,建议根据客户端在"keepalive"存活时间内的总请求数来设置)
# 当送达的请求数超过该值后,该连接就会被关闭。(通过设置为5,验证确实是这样)
keepalive_requests 8192; # http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
# 第一个参数设置"keep-alive客户端长连接"将在"服务器端"继续打开的超时时间(默认是75秒,建议根据具体业务要求来,但必须要求所有客户端连接的"Keep-Alive"头信息与该值设置的相同(这里是5分钟),同时与上游服务器(Tomcat)的设置是一样的)
# 可选的第二个参数设置“Keep-Alive: timeout=time”响应头字段的值
keepalive_timeout 300s 300s; ...
include /etc/nginx/web_servers.conf;
include /etc/nginx/proxy_params;
} web_servers.conf:
upstream web_server {
server 127.0.0.1:8080; # http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
# 连接到上游服务器的最大并发空闲keepalive长连接数(默认是未设置,建议与Tomcat Connector中的maxKeepAliveRequests值一样)
# 当这个数被超过时,使用"最近最少使用算法(LUR)"来淘汰并关闭连接。
keepalive 768;
} server {
listen 80;
server_name lihg.com www.lihg.com; location / {
proxy_pass http://web_server; ##
# 与上游服务器(Tomcat)建立keepalive长连接的配置,可参考上面的keepalive链接里的"For HTTP"部分
##
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
# 设置代理的HTTP协议版本(默认是1.0版本)
# 使用keepalive连接的话,建议使用1.1版本。
proxy_http_version 1.1;
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
# 允许重新定义或追加字段到传递给代理服务器的请求头信息(默认是close)
proxy_set_header Connection ""; proxy_redirect off;
}
} [参考]
nginx反向代理配置keepalive
keepalive for HTTP - Module ngx_http_core_module 2. Tomcat
conf/server.xml:
<!--
maxThreads:由此连接器创建的最大请求处理线程数,这决定可同时处理的最大并发请求数(默认为200)
minSpareThreads:保持运行状态的最小线程数(默认为10)
acceptCount:接收传入的连接请求的最大队列长度(默认队列长度为100) connectionTimeout:在接收一条连接之后,连接器将会等待请求URI行的毫秒数(默认为60000,60秒)
maxConnections:在任何给定的时间,服务器能接收和处理的最大连接数(NIO的默认值为10000)
keepAliveTimeout:在关闭这条连接之前,连接器将等待另一个HTTP请求的毫秒数(默认使用connectionTimeout属性值)
maxKeepAliveRequests:在该连接被服务器关闭之前,可被流水线化的最大HTTP请求数(默认为100) enableLookups:启用DNS查询(默认是DNS查询被禁用)
compression:连接器是否启用HTTP/1.1 GZIP压缩,为了节省服务器带宽
compressionMinSize:指定输出响应数据的最小大小(默认为2048,2KB)
compressableMimeType:可使用HTTP压缩的文件类型
server:覆盖HTTP响应的Server头信息
-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="768"
minSpareThreads="512"
acceptCount="128" connectionTimeout="1000"
maxConnections="1024"
keepAliveTimeout="300000"
maxKeepAliveRequests="768" enableLookups="false"
URIEncoding="utf-8"
redirectPort="8443"
compression="on" compressionMinSize="1024" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/xml"
server="webserver" />
[参考]
The HTTP Connector - Tomcat 7 Configuration Reference 3. Client
客户端HTTP "Keep-Alive"实现代码,请打开下一行的链接。
KeepAliveHttpClientsTest -> httpclient-x 【结果验证】
使用 "sudo netstat -antp | grep 80" 监控与Nginx相关的线程状态

nginx长连接设置的更多相关文章

  1. Loadrunner_http长连接设置

    最近协助同事解决了几个问题,也对loadrunner的一些设置加深了理解,关键是更加知其所以然. ljonathan http://www.51testing.com/html/48/202848-2 ...

  2. nginx 长连接keeplive

    发现后台日志打印太多 FD打开太多的日志. 处理思路: 修改nginx upstream的长连接 http://blog.csdn.net/gzh0222/article/details/852363 ...

  3. TCP 长连接保活机制&HTTP长连接设置

    TCP KeepAlive Wireshark抓包分析机制 -------------------------------- 如上图所示,TCP保活报文总是成对出现,包括TCP保活探测报文和TCP保活 ...

  4. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

  5. NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言   当管理大量连接时,特别 ...

  6. Nginx与Tomcat、Client之间请求的长连接配置不一致问题解决[转]

    http://bert82503.iteye.com/blog/2152613 前些天,线上出现“服务端长连接与客户端短连接引起Nginx的Writing.Active连接数过高问题”,这个是由于“服 ...

  7. nginx配置长连接

    http { keepalive_timeout 20; --长连接timeout keepalive_requests 8192; --每个连接最大请求数 } events { worker_con ...

  8. Nginx Upstream Keepalive 分析 保持长连接

    Nginx Upstream长连接由upstream模式下的keepalive指令控制,并指定可用于长连接的连接数,配置样例如下: upstream http_backend {     server ...

  9. Nginx中的长连接

    在nginx中,对于http1.0与http1.1是支持长连接的 我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次 ...

随机推荐

  1. SharePoint REST Create Folder

    function createListFolder(siteUrl, listName, foldername) { var serverUrl = _spPageContextInfo.webAbs ...

  2. 用H5和js写一个移动端自定义播放器

    前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...

  3. C#通过WatiN操作页面中内嵌的Iframe

    通过WatiN.Core.Broswer.Frame()方法来获取iframe对象,之后的容器就是frame,然后进行操作. 下面的例子是登录QQ空间的: Frame frame = browser. ...

  4. Android 中onConfigurationChanged问题

    onConfigurationChanged 不生效问题解决方案: 1).首先,需要重写onConfigurationChanged函数 @Override    public void onConf ...

  5. RPM方式安装MySQL5.6

    原文转自:http://blog.csdn.net/liumm0000/article/details/18841197 未整理! RPM方式安装MySQL5.6 a. 检查MySQL及相关RPM包, ...

  6. webpack使用tree shaking的问题。及关于UglifyJs不支持ES6的解决方案。

    webpack: plugins:[ new webpack.optimize.UglifyJsPlugin({ compress:{warning:true} }) ] 是的,一些dead code ...

  7. 关于django xadmin的学习改造(菜单名称,更改默认前缀数据库)

    路径xadmin-master\demo_app\app\models.py class c(models.Model): ip_address = models.CharField(max_leng ...

  8. poj2368 Buttons Nim取石子游戏

    链接:http://poj.org/problem?id=2368 和前面差距还是很大啊囧 代码: k,a;main(i){,i=;i<=k/&&k%i;++i);k%i||(a ...

  9. 【P1379】天才的约数和

    来自GDOI2007,原题已不可考-- 又自己做出来了好开心,找特殊性是个关键的切入点 原题: 这天周航遇到了靳泽旭. 周航:"我是天才!" 靳泽旭:"你为什么是天才?& ...

  10. HDU 5964 平行四边形

    假设直线L和L'相交于原点O.假设S ={s1,s2,...,sn}是平面上的n个点.你打 算找四个点满足如下条件:1.   A ∈ L 而 A' ∈ L'.2.   B,B'都属于S;即 B∈S 且 ...