原文:https://blog.sina.com.cn/s/blog_e59371cc0102ux5w.html

先把三个容易混的事分开:
- LVS 作为一层负载均衡代理,链接该保持的没保持、该断的没断,都会直接影响业务;
- TCP 的 KeepAlive 和 HTTP 的 Keep-Alive 不是一回事(HTTP 那个中间有横杠);
- KeepAlive 要在 Nginx 里单独设,系统内核没有全局配置项能代替它。

TCP 层怎么设
四层转发(stream)里,靠 listen 的 so_keepalive 开,再把超时时间拉长:
upstream mariadb_3306 {
hash $remote_addr consistent;
server 192.168.31.16:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 3306 so_keepalive=on;
proxy_connect_timeout 5s; # 连接超时时间
proxy_timeout 1d; # 超时时间
proxy_pass mariadb_3306; # 转发目标的IP及端口号
}
server {
listen 3306 udp;
proxy_connect_timeout 5s; # 连接超时时间
proxy_timeout 1d; # 超时时间
proxy_pass mariadb_3306; # 转发目标的IP及端口号
}
proxy_timeout 默认很短,长连接的业务(数据库、长轮询)不把它改大,连接会被 Nginx 主动断掉。so_keepalive=on 作用于 Nginx 和后端之间的 TCP 连接,和浏览器侧的 HTTP Keep-Alive 是两层,各管各的。
评论
还没有人留言。