Nginx的upstream连接池

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;

    keepalive 8;
}

server {  
    ...

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


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

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


参考资料

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: