一、前言
我们在接触nginx的时候,经常会听到keepalived\keepalive\keep-alive这些词汇,很容易搞乱,这边针对这些名词,进行总结。
二、概述
- keepalived:高可用的解决方案,在nginx中就是负责将多台nginx集群,实现高可用,详细的内容,有主备模式和双主模式,之后的篇幅,进行描述
- keepalive: 这个tcp相关,保活,之后扩展
- keep_alive:这个跟http相关,也就是我们常说的长连接,如果请求头connect close 表示关闭长连接,如果为keep-alive,则打开长连接,1.0默认close,1.1默认keep-alive,反向代理,建议使用长连接
三、长连接
一般我们说的长连接的情况有两种:
- 客户端和nginx的长连接
- nginx和服务端的长连接
四、保持和客户端的长连接
http {
keepalive_timeout 300s;
keepalive_requests 10000;
}
- keepalive_timeout 默认75秒,可以设置成0,代表短连接
- keepalive_requests 默认100个请求,用于设置一个keep-alive连接上可以服务的请求的最大数量,然后达到数量,执行好之后,就会被关闭,如果这个值很小,会不停的销毁、创建,会产生大量的TIME_WAIT,因此为了避免这种情况发生,将这个值设置大点,比如10000
五、保持和服务端的长连接
nginx访问后端,默认都是使用短连接(http1.0),一个请求来了,nginx就会新开一个和后端的连接,后端执行完毕后,主动关闭该连接。
http {
upstream BACKEND {
...
keepalive 300; // 空闲等待时长 单位秒
}
server {
listen 8080 default_server;
server_name "";
location / {
...
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
解释说明:
- keepalive 300 空闲等待时长,在这个时间内,请求可以共用这个tcp连接,超过这个时间,就关闭
- proxy_http_version 1.1;nginx默认是http1.0请求,1.1的请求默认是长连接
- proxy_set_header Connection “”;清空header的连接信息,因为有可能客户端和nginx的连接是短连接,如果传过来的话,就会将nginx和服务端的连接变成短连接,然后你这边把他给清空掉,就可以用http1.1的默认,正好http1.1的默认值,就是长连接
总结
这边主要将长连接的问题,其他的内容,之后篇幅进行说明