keep alive,分爲HTTP層的Keep-Alive和TCP層的KeepAlive,兩者是不同的概念。
一般的通信過程爲:TCP層握手 -> HTTP層請求響應 -> TCP層關閉連接
TCP層的KeepAlive爲TCP層握手結束之後保持連接,其timeout爲TCP層握手結束之後能保持多長時間,如果在這個時間範圍內客戶端沒有數據傳輸,則關閉連接。
HTTP層的Keep-Alive爲HTTP層請求結束之後保持連接,其timeout爲HTTP層請求結束之後能保持多少時間,如果在這個時間範圍內客戶端沒有數據傳輸,則關閉連接。
Nginx的keepalive_timeout爲HTTP層的連接超時時間,爲0則表示不啓用Keep-Alive,即請求結束之後立刻關閉連接。
測試Nginx的keepalive_timeout屬性。
1、設置Nginx的keepalive_timeout爲20s,日誌等級設爲debug(需要編譯加上debug支持)。
訪問一個連接,見error.log,以下日誌都簡寫,只寫明主要部分。
11:30:10 *** set http keepalive handler
11:30:10 *** http close request
...
11:30:30 *** http keepalive handler
11:30:30 *** close http connection
從日誌可以看到,關閉請求20秒之後,關閉了連接。
2、設置Nginx的keepalive_timeout爲0,日誌等級設爲debug(需要編譯加上debug支持)。
訪問一個連接,見error.log,以下日誌都簡寫,只寫明主要部分。
11:35:00 *** http close request
11:35:00 *** close http connection
從日誌可以看到,關閉請求之後立刻關閉了連接。