客戶端與nginx的長連線
keepalive_timeout
:客戶端與nginx之間的長連線超時設定,當乙個連線的最後一次資料傳輸至今超過了這個時間,那麼當前連線就會被服務端主動關閉。 預設值60s,因此客戶端與nginx預設是長連線的。
keepalive_requests
:也是客戶端與nginx的長連線設定,如果當前客戶端與nginx之間的長連線上處理的請求數量超過設定值,那麼當前長連線將會被關閉,qps不高的情況下使用預設值就行了,如果qps高達10000級別,最好把這個值調高一些。
nginx與server的長連線
nginx與server預設使用http1.0協議,這種連線是短連線,當請求到達時建立連線,當請求被處理完成後,立即關閉連線,想要使nginx與server之間使用長連線,需要設定http1.1協議,以及upstream中的最大空閒連線數。
}}keepalive
: 空閒長連線的最大數量。復用keepalive連線:free操作將當前連線快取到cache佇列中,並儲存該連線對應後端的socket位址,get操作根據想要連線後端的socket位址,遍歷查詢cache佇列,如果找到就使用先前快取的長連線,未找到就重新建立新的連線。等到一些請求完成後,執行free操作,如果空閒的長連線數量超過了這個設定的值,nginx將會按照最近最少使用的原則關閉超過設定數量的連線。nginx官方推薦keepalive的連線數應該配置的盡可能小,以免出現被快取的連線太多而造成新的連線請求過來時無法獲取連線的情況(乙個worker程序的總連線池是有限的)。nginx的長連線池,不是程序間共享的。nginx upstream keepalive在快取連線(free操作)和獲取快取的連線(get操作)時,只是查詢匹配後端伺服器的位址,而對前端沒有任何感知。這就會造成乙個問題,當使用者1訪問某站點後,會建立乙個tcp連線,在後端web伺服器沒有關閉該連線之前,使用者2同樣訪問該站點時,則不用建立tcp連線即可直接訪問,也就是說nginx與後端的keepalive連線對前端來說是共享的,這就造成乙個效能問題,當幾萬個使用者同時訪問同一站點時,這幾萬個使用者與nginx建立了幾萬條tcp連線,而nginx與後端伺服器確有可能只有一條連線,這一條連線需要服務前端的幾萬個使用者,這就大大的影響了系統的效能!可以在釋放對端連線時新增前端ip位址(獲取其他標識資訊)來標識前端,在獲取連線遍歷連線cache池時增加前端ip位址查詢匹配,這樣方能攜帶前端標識,避免多個前端共用乙個後端連線從而影響效能的問題。
proxy_connect_timeout
:與後端伺服器建立連線的超時時間,我目前的理解是建立開始至建立連線成功的時間,nginx官方提示這個超時一般不要大於75秒。
proxy_send_timeout
:預設60s,定義向後端伺服器傳輸請求的超時。這是向server傳送相鄰的兩個請求之間的最長時間間隔。如果後端伺服器在超時時間段內沒有接收到任何資料,連線將被關閉。
proxy_read_timeout
:預設60s,定義從後端伺服器讀取響應的超時。此超時是指相鄰兩次讀操作之間的最長時間間隔,而不是整個響應傳輸完成的最長時間。如果後端伺服器在超時時間段內沒有返回任何資料,連線將被關閉。如果後端處理請求的耗時較久,需要把這個設定項設定得大一些。
參考:
HTTP長連線和WebSocket長連線的區別
要理解http長連線和websocket長連線的區別,首先要理解一下什麼是http的長連線和短連線。首先需要消除乙個誤解 http協議是基於請求 響應模式的,因此客戶端請求後只要服務端給了響應,本次http請求就結束了,沒有長連線這一說。那麼自然也就沒有短連線這一說了。所謂的http分為長連線和短連...
http 長連線 短連線
http短連線 非持久連線 是指,客戶端和服務端進行一次http請求 響應之後,就關閉連線。所以,下一次的http請求 響應操作就需要重新建立連線。http長連線 持久連線 是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求 響應操作。持久連線可以設定過期時間,也可以不設定。http...
http連線 如何建立長連線
http的層面上來說,沒有乙個入參,是用來指定該http連線為長連線的。長連線就是乙個普通的http連線。只是因為程式設計師,沒有立即呼叫該連線的close 方法。而是等不需要該連線的時候,才close 該連線。所以,這個連線,就叫做長連線。長連線必須使用tcp協議。http連線,是建立在tcp協議...