小李同学 keep digging deeper
Nginx

Nginx的KeepAlive配置

— 字

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

先把三个容易混的事分开:

  1. LVS 作为一层负载均衡代理,链接该保持的没保持、该断的没断,都会直接影响业务;
  2. TCP 的 KeepAlive 和 HTTP 的 Keep-Alive 不是一回事(HTTP 那个中间有横杠);
  3. 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 是两层,各管各的。

本文作者 小李同学,转载请注明出处。

评论

还没有人留言。

写一条

提交后会先进站主的待审列表,通过之后才公开。

搜索文章

输入关键词搜索文章。