1. 程式人生 > >nginx——優化 Nginx 連線超時時間

nginx——優化 Nginx 連線超時時間

  1. 什麼是連線超時

(1) 舉個例子,某飯店請了服務員招待顧客,但是現在飯店不景氣,因此要解僱掉一些服務員,這裡的服務員就相當於 Nginx 服務建立的連線

(2) 當伺服器建立的連線沒有接收處理請求時,可以在指定的時間內讓它超時自動退出

  1. 連線超時的作用

(1) 將無用的連線設定為儘快超時,可以保護伺服器的系統資源(CPU、記憶體、磁碟)

(2) 當連線很多時,及時斷掉那些建立好的但又長時間不做事的連線,以減少其佔用的伺服器資源

(3) 如果黑客攻擊,會不斷地和伺服器建立連線,因此設定連線超時以防止大量消耗伺服器的資源

(4) 如果使用者請求了動態服務,則 Nginx 就會建立連線,請求 FastCGI 服務以及後端 MySQL 服務,設定連線超時,使得在使用者容忍的時間內返回資料

  1. 連線超時存在的問題

(1) 伺服器建立新連線是要消耗資源的,因此,連線超時時間不宜設定得太短,否則會造成併發很大,導致伺服器瞬間無法響應使用者的請求

(2) 有些 PHP 站點會希望設定成短連線,因為 PHP 程式建立連線消耗的資源和時間相對要少些

(3) 有些 Java 站點會希望設定成長連線,因為 Java 程式建立連線消耗的資源和時間要多一些,這時由語言的執行機制決定的

  1. 設定連線超時

(1) keepalive_timeout :該引數用於設定客戶端連線保持會話的超時時間,超過這個時間伺服器會關閉該連線

(2) client_header_timeout :該引數用於設定讀取客戶端請求頭資料的超時時間,如果超時客戶端還沒有傳送完整的 header 資料,伺服器將返回 “Request time out (408)” 錯誤

(3) client_body_timeout :該引數用於設定讀取客戶端請求主體資料的超時時間,如果超時客戶端還沒有傳送完整的主體資料,伺服器將返回 “Request time out (408)” 錯誤

(4) send_timeout :用於指定響應客戶端的超時時間,如果超過這個時間,客戶端沒有任何活動,Nginx 將會關閉連線

(5) tcp_nodelay :預設情況下當資料傳送時,核心並不會馬上傳送,可能會等待更多的位元組組成一個數據包,這樣可以提高 I/O 效能,但是,在每次只發送很少位元組的業務場景中,使用 tcp_nodelay 功能,等待時間會比較長

http {

include mime.types;

server_names_hash_bucket_size 512;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

tcp_nodelay on;

client_header_timeout 15;

client_body_timeout 15;

send_timeout 25;

include vhosts/*.conf;

}

作者簡介:
陳志珂(頭條號:強扭的瓜不好吃),公眾號“鉛筆學園”運維內容合作作者之一。目前就職於中國最大的安卓應用軟體公司,任高階工程師,現在公司任php開發工程師,python開發工程師,高階運維工程師。
鉛筆學園:IT資源分享|知識分享,做初級程式設計師的指明燈

這裡寫圖片描述