Nginx1.1.4+ 对后端机器的长连接特性

转自:http://zhangxugg-163-com.iteye.com/blog/1551269

nginx upstream keepalive connections

Nginx从 1.1.4 开始,实现了对后端机器的长连接支持,这是一个激动人心的改进,这意味着 Nginx 与后端机器的通信效率更高,后端机器的负担更低。

例如,对一个没有长连接支持的后端机器,会出现大量TIME_WAIT 状态的连接,使用以下命令验证之:

netstat -n | grep TIME_WAIT

经过查阅官方文档,其目前已经实现了http, fastcgi, memcache 协议的长连接支持。而之前的版本中仅支持 memcache 协议。

1. 启用到 memcache 服务器的长连接
在upstream
配置段中增加
keepalive N
指令即可:

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;

}

}

2. 
启用fastcgi
长连接支持

除了需要在upstream
中配置
keepalive N
外,还需要在
location
中增加
fastcgi_keep_conn on;

upstream fastcgi_backend {

server 127.0.0.1:9000;

keepalive 8;

}

server {

...

location /fastcgi/ {

fastcgi_pass fastcgi_backend;

fastcgi_keep_conn on;

...

}

}

3. 
启用对后端机器HTTP
长连接支持

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 "";

...

}

}

注意:需要设置nginx
代理请求的
http
协议版本号为
1.1, 
以及清除掉
Connection
请求
header, 
官方文档描述:

For HTTP, the proxy_http_version directive should be set to “
1.1
” 
and the 

Connection
” 
header field should be cleared

.

The connections parameter should be set low enough to allow upstream servers to process additional new incoming connections as well.

即是说:keepalive N
指令中
, N
的值应该尽可能设置小一些,以便后端机器可以同时接受新的连接。

在我负责的生产环境中,前端是nginx, 
静态文件缓存使用
varnish, 
使用长连接之后,
varnish
机器的连接数从
8000
多下降至
200
多,负载值也有明显降低。

但是针对fastcgi, 
即后端机器是
php-fpm
服务时,在
nginx
日志中出现以下错误:

upstream sent unsupported FastCGI protocol version: 0 while reading upstream

广泛搜集,目前还未解决之。如果您遇到同样的问题并解决之,请一定联系笔者信箱[email protected],

甚是感谢。

时间: 2024-10-05 04:58:26

Nginx1.1.4+ 对后端机器的长连接特性的相关文章

TCP长连接与短链接

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,ser

TCP长连接与短连接的区别

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,se

tcp短连接和长连接

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,se

长连接和短连接分析

转自:http://www.cnblogs.com/heyonggang/p/3660600.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向

长连接&短连接分析

转自:http://www.cnblogs.com/heyonggang/p/3660600.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向

长连接和短连接的区别(二)

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,se

TCP长连接和短连接

1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接.client向server发送消息,se

长连接和短链接(ZZ)

http://blog.csdn.net/shanliangliuxing/article/details/7743917 长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持. 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接.  比如http的,只是连接.请求.关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关

长连接和短连接的区别

原文:http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连