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
从日志可以看到,关闭请求之后立刻关闭了连接。