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