nginx——優化 Nginx 連線超時時間
- 什麼是連線超時
(1) 舉個例子,某飯店請了服務員招待顧客,但是現在飯店不景氣,因此要解僱掉一些服務員,這裡的服務員就相當於 Nginx 服務建立的連線
(2) 當伺服器建立的連線沒有接收處理請求時,可以在指定的時間內讓它超時自動退出
- 連線超時的作用
(1) 將無用的連線設定為儘快超時,可以保護伺服器的系統資源(CPU、記憶體、磁碟)
(2) 當連線很多時,及時斷掉那些建立好的但又長時間不做事的連線,以減少其佔用的伺服器資源
(3) 如果黑客攻擊,會不斷地和伺服器建立連線,因此設定連線超時以防止大量消耗伺服器的資源
(4) 如果使用者請求了動態服務,則 Nginx 就會建立連線,請求 FastCGI 服務以及後端 MySQL 服務,設定連線超時,使得在使用者容忍的時間內返回資料
- 連線超時存在的問題
(1) 伺服器建立新連線是要消耗資源的,因此,連線超時時間不宜設定得太短,否則會造成併發很大,導致伺服器瞬間無法響應使用者的請求
(2) 有些 PHP 站點會希望設定成短連線,因為 PHP 程式建立連線消耗的資源和時間相對要少些
(3) 有些 Java 站點會希望設定成長連線,因為 Java 程式建立連線消耗的資源和時間要多一些,這時由語言的執行機制決定的
- 設定連線超時
(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資源分享|知識分享,做初級程式設計師的指明燈