keepalive指令

语法:keepalive <connections>;
上下文:upstream

激活Nginx worker到upstream服务器的连接的缓存。
connections参数用来设置连接池中空闲的连接的最大数量,这些连接会被保存在每个worker的缓存中。当连接数量达到这个值的时候,后续建立的连接不会被缓存(在使用完之后,就会关闭)。

需要特别注意的是:keepalive指令不会限制nginx worker进程到upstream服务器的连接的总数。

下面是使用keepalive连接的memcached upstream的示例配置:

upstream memcached_backend {
    server 127.0.0.1:11211;
    server 10.0.0.2:11211;

    keepalive 32;
}

server {
    ...

    location /memcached/ {
        set $memcached_key $uri;
        memcached_pass memcached_backend;
    }

}

对于HTTP协议,proxy_http_version指令应该被设置为1.1,“Connection”头应该被清空:

upstream http_backend {
    server 127.0.0.1:8080;

    keepalive 16;
}

server {
    ...

    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        ...
    }
}

可以通过传递“Connection: Keep-Alive”头,来使用HTTP/1.0的持久化连接,但是并不推荐使用这种方式。

对于FastCGI服务器,为了使用keepalive连接,需要设置fastcgi_keep_conn

upstream fastcgi_backend {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;

    keepalive 8;
}

server {
    ...

    location /fastcgi/ {
        fastcgi_pass fastcgi_backend;
        fastcgi_keep_conn on;
        ...
    }
}

当不使用默认的round-robin算法,而是使用其他的负载均衡算法时,应该在keepalive指令之前,激活它们。

SCGI和uwsgi协议没有keepalive连接的概念。


参考资料