Nginx中keepalive配置小結(jié)
keepalive基礎(chǔ)介紹
keepalive是HTTP/1.1協(xié)議中的一個(gè)特性,它允許客戶端和服務(wù)器之間的TCP連接在一個(gè)HTTP請(qǐng)求/響應(yīng)周期結(jié)束后保持打開狀態(tài),以便在后續(xù)的請(qǐng)求中重復(fù)使用。這樣可以減少TCP連接的建立和關(guān)閉次數(shù),從而提高性能。
(注意:keepalive是tcp層長(zhǎng)連接探活機(jī)制;keep-alive是應(yīng)用層http協(xié)議使用,在其頭部Connection字段中的一個(gè)值,只是代表客戶端與服務(wù)之間需要保持長(zhǎng)連接,可以理解為通過(guò)此字段來(lái)告訴nginx此連接需要維持長(zhǎng)連接,處理完別直接關(guān)閉連接。)
- 連接維護(hù):keepalive會(huì)維護(hù)長(zhǎng)連接,并在連接超時(shí)時(shí)間內(nèi)重新連接,以確保服務(wù)器端始終處于運(yùn)行狀態(tài)。
- 提高效率:通過(guò)維護(hù)長(zhǎng)連接,可以減少建立和關(guān)閉連接所需的時(shí)間,從而提高服務(wù)器的效率。
- 節(jié)省帶寬:由于keepalive可以維護(hù)長(zhǎng)連接,因此減少了建立和關(guān)閉連接所需的網(wǎng)絡(luò)流量,從而節(jié)省了帶寬。
- 穩(wěn)定性:通過(guò)心跳包維護(hù)連接,可以確保服務(wù)器端始終處于運(yùn)行狀態(tài),從而提高了網(wǎng)站的穩(wěn)定性和可用性。
為什么使用HTTPs長(zhǎng)連接技術(shù)?
- 對(duì)響應(yīng)時(shí)間要求較高;
- 服務(wù)走的是公網(wǎng),客戶端與服務(wù)端的TCP建立的三次握手和斷開的四次揮手都需要40ms左右(真實(shí)數(shù)據(jù)包計(jì)算出來(lái)的),共需要80ms左右;
- 每個(gè)接入方使用的IP就若干個(gè),需要建立的請(qǐng)求連接有限。
- 使用長(zhǎng)連接技術(shù),可以大幅減少TCP頻繁握手的次數(shù),極大提高響應(yīng)時(shí)間;同時(shí),即使使用長(zhǎng)連接技術(shù),也不需要消耗很多的系統(tǒng)資源用來(lái)緩存sockets會(huì)話信息。
http { upstream backend { server 192.168.0.1:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.0.2:8080 weight=1 max_fails=2 fail_timeout=30s; keepalive 300; } server { listen 8080 default_server; server_name ""; location / { proxy_pass http://backend; proxy_http_version 1.1; #設(shè)置http版本為1.1 proxy_set_header Connection ""; #設(shè)置Connection為長(zhǎng)連接(默認(rèn)為no) } }
HTTP 協(xié)議中對(duì)長(zhǎng)連接的支持是從 1.1 版本之后才有的,因此最好通過(guò) proxy_http_version 指令設(shè)置為 1.1。HTTP1.0不支持keepalive特性,當(dāng)沒(méi)有使用HTTP1.1的時(shí)候,后端服務(wù)會(huì)返回101錯(cuò)誤,然后斷開連接。而 "Connection" header 可以選擇被清理,這樣即便是 Client 和 Nginx 之間是短連接,Nginx 和 upstream 之間也是可以開啟長(zhǎng)連接的。這種情況下必須清理來(lái)自 Client 請(qǐng)求中的 “Connection” header。
要想做到Client與Nginx之間保持長(zhǎng)連接,需要:
- - Client發(fā)送過(guò)來(lái)的HTTP請(qǐng)求要求攜帶"keep-alive"header。
- - Nginx設(shè)置支持keepalive
Nginx中的keepalive配置項(xiàng)
keepalive_timeout
Nginx 使用 keepalive_timeout 來(lái)指定 KeepAlive 的超時(shí)時(shí)間(timeout),指定每個(gè) TCP 連接最多可以保持多長(zhǎng)時(shí)間。Nginx 的默認(rèn)值是 75 秒,有些瀏覽器最多只保持 60 秒,所以可以設(shè)定為 60 秒。若將它設(shè)置為 0,就禁止了 keepalive 連接。
#?可用于?http,?server,?location?配置塊 #?設(shè)置?TCP?鏈接保持?60?秒 keepalive_timeout?60s;
send_timeout
服務(wù)端向客戶端傳輸數(shù)據(jù)的超時(shí)時(shí)間。這個(gè)設(shè)置不會(huì)用于整個(gè)轉(zhuǎn)發(fā)器,而是在兩次客戶端讀取操作之間。如果在這段時(shí)間內(nèi),客戶端沒(méi)有讀取任何數(shù)據(jù),Nginx就會(huì)關(guān)閉連接。
# 配置段: http, server, location send_timeout 30s;
keepalive_request
keepalive_requests:默認(rèn)100,某個(gè)長(zhǎng)連接連續(xù)處理請(qǐng)求次數(shù)限制,超過(guò)次數(shù)則該長(zhǎng)連接被關(guān)閉;如果需要釋放某個(gè)連接占用的內(nèi)存,必須關(guān)閉該鏈接,內(nèi)存不大的情況下,不建議開大該配置;在QPS較高的場(chǎng)景,則有必要加大這個(gè)參數(shù)
# 配置段: http, server, location keepalive_request 10000;
應(yīng)用場(chǎng)景
什么時(shí)候使用?
明顯的預(yù)知用戶會(huì)在當(dāng)前連接上有下一步操作 復(fù)用連接,有效減少握手次數(shù),尤其是https建立一次連接開銷會(huì)更大
什么時(shí)候不用?
訪問(wèn)內(nèi)聯(lián)資源一般用緩存,不需要keepalive 長(zhǎng)時(shí)間的tcp連接容易導(dǎo)致系統(tǒng)資源無(wú)效占用
到此這篇關(guān)于Nginx中keepalive配置小結(jié)的文章就介紹到這了,更多相關(guān)Nginx keepalive配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx出現(xiàn)403?Forbidden的幾種簡(jiǎn)單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Nginx的405 not allowed錯(cuò)誤解決方法
本文主要介紹了Nginx的405 not allowed錯(cuò)誤解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Nginx實(shí)現(xiàn)http自動(dòng)跳轉(zhuǎn)到https
本文主要介紹了Nginx實(shí)現(xiàn)http自動(dòng)跳轉(zhuǎn)到https,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01在nginx中配置pathinfo模式支持thinkphp的URL重寫
這篇文章主要介紹了在nginx中配置pathinfo模式的例子,用來(lái)支持thinkphp的URL重寫,并解決了thinkphp一個(gè)路徑問(wèn)題,需要的朋友可以參考下2014-04-04Nginx部署多個(gè)vue項(xiàng)目的方法步驟
本文主要介紹了Nginx部署多個(gè)vue項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06