nginx的so_keepalive和timeout相关小计

KeepAlive

这里的keepalive是TCP的探活机制:

[root@ ~]# sysctl -a  |grep tcp_keepalive
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

参数解释:

  • tcp_keepalive_time 1200 ,tcp建立链接后1200 秒如果无数据传输,则会发出探活数据包
  • tcp_keepalive_probes 9 , 共发送9次
  • tcp_keepalive_intvl 75 ,每次间隔75秒

KeepAlive并不是默认开启的,在Linux系统上没有一个全局的选项去开启TCP的KeepAlive。需要开启KeepAlive的应用必须在TCP的socket中单独开启。

TCP socket也有三个选项和内核对应,通过setsockopt系统调用针对单独的socket进行设置:

  • TCPKEEPCNT: 覆盖 tcpkeepaliveprobes
  • TCPKEEPIDLE: 覆盖 tcpkeepalivetime
  • TCPKEEPINTVL: 覆盖 tcpkeepalive_intvl

Nginx

server {
    listen 127.0.0.1:3306 so_keepalive=on;
    proxy_pass 172.17.0.3:3306;
    
    #建立连接时间
    proxy_connect_timeout 5s;
    #保持连接时间
    proxy_timeout 3600s;
    error_log /data/logs/my.log info;

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]

  • on: 开启,探测参数更加系统默认值
  • off: 关闭
  • keepidle: 等待时间
  • keepintvl: 发送探测报文间隔
  • keepcent: 探测报文发送次数

proxy_timeout:建连后无数据时与后端服务器连接保持时间,默认75s。

proxy_connect_timeout:与后端服务器建立连接的超时, 不超过75s。

proxy_send_timeout:向后端服务器组发出write请求后,等待响应的超时间,默认为60秒。

proxy_read_timeout:向后端服务器组发出read请求后,等待响应的超时间,默认为60秒。

posted @ 2019-08-14 19:16  wshenJin  阅读(4870)  评论(0编辑  收藏  举报