http { keepalive_timeout 20; --长链接timeout keepalive_requests 8192; --每一个链接最大请求数 }
events { worker_connections 102400; }
转:http://bert82503.iteye.com/blog/2152613javascript
先说说服务为何使用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相关的线程状态