nginx配置长连接
生活随笔
收集整理的這篇文章主要介紹了
nginx配置长连接
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http {
keepalive_timeout 60s; --長(zhǎng)連接timeout
keepalive_requests 8192; --每個(gè)連接最大請(qǐng)求數(shù)
upstream servers {
server 127.0.0.1:7985 ;
server 127.0.0.1:7986 ;
keepalive 10;
}
server {
listen 7995;
server_name 127.0.0.1;
location / {
proxy_pass http://servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
}
events {
worker_connections 102400;
}
轉(zhuǎn):http://bert82503.iteye.com/blog/2152613
先說說服務(wù)為什么使用HTTPs長(zhǎng)連接技術(shù)?有如下幾個(gè)原因:
對(duì)響應(yīng)時(shí)間要求較高;
服務(wù)走的是公網(wǎng),客戶端與服務(wù)端的TCP建立的三次握手和斷開的四次握手都需要40ms左右(真實(shí)數(shù)據(jù)包計(jì)算出來的),共需要80ms左右;
每個(gè)接入方使用的IP就若干個(gè),需要建立的請(qǐng)求連接有限。
使用長(zhǎng)連接技術(shù),可以大幅減少TCP頻繁握手的次數(shù),極大提高響應(yīng)時(shí)間;同時(shí),即使使用長(zhǎng)連接技術(shù),也不需要消耗很多的系統(tǒng)資源用來緩存sockets會(huì)話信息。
以下是在自己電腦上驗(yàn)證三者之間的長(zhǎng)連接請(qǐng)求,連接存活時(shí)間都為5min。
【環(huán)境】
操作系統(tǒng):Ubuntu 14.04 LTS
Nginx:1.6.2
Tomcat:7.0.51
JDK:1.7.0_51
Client:HttpClient 4.3.5
【相關(guān)配置】
1. Nginx - 反向代理
nginx.conf:
http {
...
##
# 與Client連接的長(zhǎng)連接配置
##
# http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests
# 設(shè)置通過"一個(gè)存活長(zhǎng)連接"送達(dá)的最大請(qǐng)求數(shù)(默認(rèn)是100,建議根據(jù)客戶端在"keepalive"存活時(shí)間內(nèi)的總請(qǐng)求數(shù)來設(shè)置)
# 當(dāng)送達(dá)的請(qǐng)求數(shù)超過該值后,該連接就會(huì)被關(guān)閉。(通過設(shè)置為5,驗(yàn)證確實(shí)是這樣)
keepalive_requests 8192;
# http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
# 第一個(gè)參數(shù)設(shè)置"keep-alive客戶端長(zhǎng)連接"將在"服務(wù)器端"繼續(xù)打開的超時(shí)時(shí)間(默認(rèn)是75秒,建議根據(jù)具體業(yè)務(wù)要求來,但必須要求所有客戶端連接的"Keep-Alive"頭信息與該值設(shè)置的相同(這里是5分鐘),同時(shí)與上游服務(wù)器(Tomcat)的設(shè)置是一樣的)
# 可選的第二個(gè)參數(shù)設(shè)置“Keep-Alive: timeout=time”響應(yīng)頭字段的值
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
# 連接到上游服務(wù)器的最大并發(fā)空閑keepalive長(zhǎng)連接數(shù)(默認(rèn)是未設(shè)置,建議與Tomcat Connector中的maxKeepAliveRequests值一樣)
# 設(shè)置每個(gè)worker進(jìn)程與后端服務(wù)器保持連接的最大數(shù)量。這些保持的連接會(huì)被放入緩存。 如果連接數(shù)大于這個(gè)值時(shí),最久未使用的連接會(huì)被關(guān)閉。使用"最近最少使用算法(LUR)"來淘汰并關(guān)閉連接。
keepalive 768;
}
server {
listen 80;
server_name lihg.com www.lihg.com;
location / {
proxy_pass http://web_server;
##
# 與上游服務(wù)器(Tomcat)建立keepalive長(zhǎng)連接的配置,可參考上面的keepalive鏈接里的"For HTTP"部分
##
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
# 設(shè)置代理的HTTP協(xié)議版本(默認(rèn)是1.0版本)
# 使用keepalive連接的話,建議使用1.1版本。
proxy_http_version 1.1;
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
# 允許重新定義或追加字段到傳遞給代理服務(wù)器的請(qǐng)求頭信息(默認(rèn)是close)
proxy_set_header Connection "";
proxy_redirect off;
}
}
[參考]
nginx反向代理配置keepalive
keepalive for HTTP - Module ngx_http_core_module
2. Tomcat
conf/server.xml:
<!--
maxThreads:由此連接器創(chuàng)建的最大請(qǐng)求處理線程數(shù),這決定可同時(shí)處理的最大并發(fā)請(qǐng)求數(shù)(默認(rèn)為200)
minSpareThreads:保持運(yùn)行狀態(tài)的最小線程數(shù)(默認(rèn)為10)
acceptCount:接收傳入的連接請(qǐng)求的最大隊(duì)列長(zhǎng)度(默認(rèn)隊(duì)列長(zhǎng)度為100)
connectionTimeout:在接收一條連接之后,連接器將會(huì)等待請(qǐng)求URI行的毫秒數(shù)(默認(rèn)為60000,60秒)
maxConnections:在任何給定的時(shí)間,服務(wù)器能接收和處理的最大連接數(shù)(NIO的默認(rèn)值為10000)
keepAliveTimeout:在關(guān)閉這條連接之前,連接器將等待另一個(gè)HTTP請(qǐng)求的毫秒數(shù)(默認(rèn)使用connectionTimeout屬性值)
maxKeepAliveRequests:在該連接被服務(wù)器關(guān)閉之前,可被流水線化的最大HTTP請(qǐng)求數(shù)(默認(rèn)為100)
enableLookups:?jiǎn)⒂肈NS查詢(默認(rèn)是DNS查詢被禁用)
compression:連接器是否啟用HTTP/1.1 GZIP壓縮,為了節(jié)省服務(wù)器帶寬
compressionMinSize:指定輸出響應(yīng)數(shù)據(jù)的最小大小(默認(rèn)為2048,2KB)
compressableMimeType:可使用HTTP壓縮的文件類型
server:覆蓋HTTP響應(yīng)的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"實(shí)現(xiàn)代碼,請(qǐng)打開下一行的鏈接。
KeepAliveHttpClientsTest -> httpclient-x
【結(jié)果驗(yàn)證】
使用 "sudo netstat -antp | grep 80" 監(jiān)控與Nginx相關(guān)的線程狀態(tài)
總結(jié)
以上是生活随笔為你收集整理的nginx配置长连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ural_1353. Milliard
- 下一篇: 为什么学好计算机就必须学好汇编?