出处:
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 。